JavaScript的变量类型:usonb
- ES5中 undefined string obiect null number boolean
- ES6新增Symbol
- 谷歌67版本中还出现了bigInt(但是多数人不把这个当作一个类型)
注意:NaN是Number中的特殊数值,不是Number类型
JS的引用类型有哪些?
Object(Object包含了Data,function,Array,Null等)JS中的typeof输出分别是什么?
基本类型输出对应类型
Null–>Object
NaN–>Number
{},[]—>object
isNaN():用来判断是否是非数值类型
基本上除了自身NaN返回true,其他都flase。以下2种特殊1
2
3
4
5
6
7
8
9
10
11
12
13
14
15isNaN(1) //false
isNaN('1') //false 将’1‘进行了转换
isNaN('1,2') //true
Number.isNaN('1,2') //false
Number('as') //NaN
Number('as') == NaN //false
isNaN(Number('as')) //true
Number.isNaN(Number('as')) //true
//对于分母为0数据
123/0 //Infinity
typeof 123/0 //NaN
123/0 == NaN //false
isNaN(123/0) //false判断是否是数字?
typeof(n) == “number” && n != Infinity && !isNaN(n)
如何判断数据类型?
1.typeof
2.toString()null,undefined 不支持
3.判断数组
instanceof,constructor,Array.isArray() 1 instanceof Number //false String一样返回flase "1".constructor == String //true
对象可以比较吗?
可以,Object.is(value1,value2)数据类型的检测方法:
typeof
基本类型都可以判断,引用类型(Array,Object,null)->object 无法区分
instanceof
只能判断引用类型
constructor
无法判断undefined和null 会报错
Object.prototype.toString.call 最推荐
可以判断所有数据类型。
对于Object对象,直接toString()就能返回’[object Object]’
同样是检测对象 obj 调用 toString 方法,obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什
么?
这是因为 toString 是 Object 的原型方法,而 Array、function 等类型作为 Object 的实例,都重写了 toString 方法。
不同的对象类型调用 toString 方法时,根据原型链的知识,调用的是对应的重写之后的 toString 方法(function 类型返回内容为函数体的字符串,Array类型返回元素组成的字符串…),而不会去调用 Object 上原型toString 方法(返回对象的具体类型),
所以采用 obj.toString()不能得到其对象类型,只能将 obj 转换为字符串类型;
因此,在想要得到对象的具体类型时,应该调用 Object 原型上的 toString 方法。即
Object.prototype.toString.call