资讯专栏INFORMATION COLUMN

【前端面试】变量和类型计算

DoINsiSt / 1708人阅读

摘要:题目使用能得到哪些类型和的选择中有哪些内置函数变量按存储方式分为哪些类型,并描述其特点如何理解知识点值类型和引用类型值类型引用类型对象,数组,函数值类型直接把值存储在堆中,把赋值给在内存中是又给开辟了一块新的空间,存储了同样的值。

1.题目

1.JS使用typeof能得到哪些类型

=== 和 == 的选择

JS中有哪些内置函数

JS变量按存储方式分为哪些类型,并描述其特点

如何理解JSON

2.知识点 2.1 值类型和引用类型

值类型(boolean,string,number,null,undefined)

var a = 10;
var b = a;
a = 20;
console.log(b); //10

引用类型(对象,数组,函数)

var a = {x:10}
var b = a;
a.x = 20;
console.log(b); //20

值类型直接把值存储在堆中,把a赋值给b在内存中是又给b开辟了一块新的空间,存储了同样的值。

引用类型分两块存储,先在堆中存储一个实际的值,再在栈中存储一个堆中值的引用地址,指向堆中的对象。把a赋值给b是在栈中重新开辟一块空间存储的还是相同对象的引用地址,a和b存储的地址相同,指向的对象也相同。当对象值发生改变时,两者会同时改变。

引用类型的值一般都比较大,采用此种存储方式可以节省内存空间。

2.2 typeof运算符
typeof "abc" //string
typeof 123  //number
typeof true  //boolean
typeof undefined  //undefined
typeof null  //object
typeof {a:10}  //object
typeof [1,2,3]  //object
typeof console.log()  //function
2.3 类型转换

强类型转换:通过String(),Number(),Boolean(),parseInt()函数强制转换

可能发生隐式类型转换的场景

字符串拼接

使用==

if语句

逻辑循环

一、首先看双等号前后有没有NaN,如果存在NaN,一律返回false。

二、再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)

三、接着看双等号前后有没有字符串, 有三种情况:

1、对方是对象,对象使用toString()或者valueOf()进行转换;
2、对方是数字,字符串转数字;(前面已经举例)
3、对方是字符串,直接比较;
4、其他返回false
四、如果是数字,对方是对象,对象取valueOf()或者toString()进行比较, 其他一律返回false

五、null, undefined不会进行类型转换, 但它们俩相等

上面的转换顺序一定要牢记,面试的时候,经常会出现类型的问题。

"100"==100  //转换成字符串
""==0  //转换成false
undefined == null; // true
1 == true; // true
2 == true; // false
0 == false; // true
0 == " "; // true
NaN == NaN; // false
[] == false; // true
[] == ![]; // true
//在if中转换成false的:
null
undefined
""
NaN
0
false
10 && 0  //0  10转换成true
"" || "abc" //abc   ""转换成false
!window.abc  //true    
2.4 null和undefined的区别

null:是被赋值过的对象,刻意把一个对象赋值为null,故意表示其为空,不应有值,所以对象为null是正常的,typeof null 返回 "object" ,null可以转换为0

undefined 表示“缺少值”,即此处应有一个值,但还没有定义;转为数值时为NaN(非数字值的特殊值) typeof undefined 返回 "undefined"

3.题目解答 3.1 JS使用typeof能得到哪些类型
typeof "abc" //string
typeof 123  //number
typeof true  //boolean
typeof undefined  //undefined
typeof null  //object
typeof {a:10}  //object
typeof [1,2,3]  //object
typeof console.log()  //function
3.2 === 和 == 的选择

jquery源码中的写法:

除了以下方式其他全部使用 ===

if(obj.a == null){
   //相当于 obj.a === undefined || obj.a === null
}
3.3 JS中有哪些内置函数

单纯作为语言来说,不考虑node和浏览器web

Object

Array

Boolean

Number

String

Function

Date

RegExp

Error

内置对象:Math,JSON

3.4 JS变量按存储方式分为哪些类型,并描述其特点

值类型何引用类型

3.5 如何理解JSON

JSON是JS中的一个内置对象

区别

JS对象 {x:10}

JSON对象 {"x":10}

JSON串 "{"x":10}"

//将JS对象转换成json串
JSON.stringify({x:10});
//将json字符串转换成json对象
JSON.parse("{"x":10}");
3.6 严格模式

目的

消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
 
消除代码运行的一些不安全之处,保证代码运行的安全;

提高编译器效率,增加运行速度;

为未来新版本的Javascript做好铺垫。

特性

  "use strict";

可以选择放在一个函数中或自定义作用域中。

禁止this指向全局对象

  function f(){
    return !this;
  } 
  // 返回false,因为"this"指向全局对象,"!this"就是false
  function f(){ 
    "use strict";
    return !this;
  } 
  // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

创设eval作用域

正常模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。
正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

  "use strict";
  var x = 2;
  console.info(eval("var x = 5; x")); // 5
  console.info(x); // 2

全局变量显式声明

 v = 1; // 报错,v未声明
  for(i = 0; i < 2; i++) { // 报错,i未声明
  }

禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

  "use strict";
  var x;
  delete x; // 语法错误
  var o = Object.create(null, {"x": {
      value: 1,
      configurable: true
  }});
  delete o.x; // 删除成功

函数不能有重名的参数

保留字

为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。
使用这些词作为变量名将会报错。

  function package(protected) { // 语法错误
    "use strict";
    var implements; // 语法错误
  }
3.7 eval

1.没有必须使用的应用场景

2.不容易调试,可读性不好

3.在旧的浏览器中如果你使用了eval,性能会下降10倍。

4.容易xss

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100658.html

相关文章

  • 前端面试之路二(javaScript基础整理)

    摘要:在标签中添加属性,本质上是跟在标签里面写属性时一样的,所以属性值最终都会编译为字符串类型。这个节点包括很多,比如,以及一些方法等方法。一个对象有很多,该集合名字为,里面有其他以及,里面有很多。 一、变量类型和计算 JS中使用typeof能得到哪些类型 变量类型 值类型:变量本身就是含有赋予给它的数值的,它的变量本身及保存的数据都存储在栈的内存块当中 引用类型:引用类型当然是分配到...

    AbnerMing 评论0 收藏0
  • 【进阶1-3期】JavaScript深入之内存空间详细图解

    摘要:进阶期理解中的执行上下文和执行栈进阶期深入之执行上下文栈和变量对象但是今天补充一个知识点某些情况下,调用堆栈中函数调用的数量超出了调用堆栈的实际大小,浏览器会抛出一个错误终止运行。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周正式开始前端进阶的第一期,本周的主题是调用堆栈,今天是第3天。 本计划一共28期,每期重点攻...

    coordinate35 评论0 收藏0
  • 撩课-Web大前端每天5道面试题-Day1

    摘要:的变量提升的底层原理是什么引擎的工作方式是先解析代码,获取所有被声明的变量然后在运行。引用计数这种方式常常会引起内存泄漏,低版本的使用这种方式。1. var的变量提升的底层原理是什么? JS引擎的工作方式是: 1) 先解析代码,获取所有被声明的变量; 2)然后在运行。也就是说分为预处理和执行两个阶段。 变量提升:所有变量的声明语句都会被提升到代码头部。 但是变量提升只对var命令声明的变...

    番茄西红柿 评论0 收藏0
  • 2019前端面试题(持续更新)

    摘要:是什么是异步编程的一种解决方案所谓,简单说就是一个容器,里面保存着某个未来才会结束的事件通常是一个异步操作的结果。 最近也在准备换工作了,然后收集了一些我觉得今年面试会遇到常见的问题。 如果有机会,记得也帮忙分享我一下。2019的行情确实很糟糕。看到这么多人收藏点赞。我的内心也是哇凉哇凉的。我也给一些除了面试题之外的经验吧 我相信不景气也是相对的,提升自我也是必要的。我说说我最近在准...

    woshicixide 评论0 收藏0
  • 2019前端面试题(持续更新)

    摘要:是什么是异步编程的一种解决方案所谓,简单说就是一个容器,里面保存着某个未来才会结束的事件通常是一个异步操作的结果。 最近也在准备换工作了,然后收集了一些我觉得今年面试会遇到常见的问题。 如果有机会,记得也帮忙分享我一下。2019的行情确实很糟糕。看到这么多人收藏点赞。我的内心也是哇凉哇凉的。我也给一些除了面试题之外的经验吧 我相信不景气也是相对的,提升自我也是必要的。我说说我最近在准...

    worldligang 评论0 收藏0

发表评论

0条评论

DoINsiSt

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<