1、基本数据类型
string
,number
,boolean
,null
,undefined
,symbol
,object
2、 == 和 === 的区别?
==
在类型不相等的情况下,会做一步强制转化。
===
如果判断类型不相等的情况下,就会停下来,返回false
。
3、 把undefined和null转成Number分别是什么
Number(null) == 0; //true Number(undefined) == NaN。//true
4、 typeof array, null, undefined, NaN分别是什么
typeof array; // "object" typeof null; //"object" typeof undefined; //"undefined" typeof NaN; //"number"
- 注释
null
的返回值是个例,它本该是一个基本类型。由于ES1的代码设计想强调,空对象和重置一个对象的概念,所以返回值定为了"object"。个人倾向这是个bug,既然设置规则null
是基本类型,就应该返回null
。
5、说到typeof,能不能加一个限制条件typeof只能判断是object,可以判断一下是否拥有数组的方法
//1、 剔除特殊的null function TypeOf(obj){ if (typeof obj === 'object' && obj !== null) { return 'object'; }else if(obj === null){ return 'null' } return typeof obj; } //2、 判断object中有数组 function hasArray(obj){ if(TypeOf(obj) === 'object'){ for(let p in obj){ if(obj[p] instanceof Array) return true; } } return false; }
6、 instanceOf和constructor的区别
- 考察点
基本类型有哪些?内建对象类型有哪些?上述两种方法的适用范围是内建对象。
instantceOf
判断的是一个目标是否为对标对象的实例。判断不了非典型对象,Boolean
,String
,Number
。
Constructor
是基本类型的属性,调用指向对应的function
,在prototype
模型中,这部分有详细的阐述。
7、 如何判断是否为数组?什么情况下会原型链断裂,导致的结果是什么?
//万能判断方法 Object.prototype.toString.call(o) === '[object Array]'; //判断a对象原型链中是否存在构造函数Array a instanceof Array ; //只判断a对象的构造函数是不是Array a.constructor === Array
instanceof
和constructor
在判断来自别的页面(global)获得的对象,例如通过iframe
获取的,判断不了是不是Array
,只能返回Object
。这就是原型链断裂。
后记
JS的三大支柱:
闭包
,数据类型
,OOP
。数据类型包括了内建数据类型
,强制转换
等内容。掌握数据类型的关键是总结出强制转化发生时的奇葩个例,比如null
,undefined
,NaN
,-0
等等。数据类型理解的越好,代码的bug会越少,虽然不起眼,确也是非常非常重要的内容。