1、javascript的数据类型分类
基本数据类型:null、undefined、bollean、number、string、symbol(ES6新增)
对象:Object
2、类型隐式转换
"1" + 1 = "11" //“+”运算符会将左右的变量统一转换为字符串后进行拼接处理
"1" - 1 = 0 //“-”运算符会尝试将左右变量转换为数字后进行减法处理通过这个特性可以完成某些操作
"1" - 0 = 1 //通过“-”运算符将字符串转换为数字
1 + "0" = "1" //通过“+”运算符将数字转换为字符串严格等于——===与非严格等于——==
严格等于会首先比较两边的类型是否相等,相等之后才回去比较两边的值
123 === "123" //首先判断两边类型,左边为number,右边为string,所以返回false
NaN === NaN //NaN不与任何值相等非严格等于不会比较两边的类型,并且会尝试将两边数据的类型进行转换,看他们能否相等
null == undefined //会将null与undefined转换为number类型0,均为0,所以返回true
1 == "1.0" //会讲右侧转换为number类型1,再与左侧进行比较,所以返回true
true == 1 //会将左侧布尔值尝试转换为number,如果是true转换为1,如果是false转换为0,所以返回true3、类型检测
一、typeof
使用typeof会返回一个字符串,显示返回的类型。但它只能判断基本数据类型、函数对象与其他对象,数组与日期等数据均会返回"object"。
比较特殊的是null类型,虽然它是基本数据类型,但是使用typeof进行类型检测时会返回"object"
typeof 100 // "number"
typeof "100" // "string"
typeof true // "bollean"
typeof [2,3] // "object"
typeof function // "function"
typeof undefined // "undefined"
typeof NaN // "number"适合基本类型及function检测,遇到null会返回object
二、instanceof
使用typeof可以很方便的判断基本数据类型,但对于数组等数据无法精准判断,所以对于object类型的数据可以使用instanceof进行类型判断
instanceof左侧为需要监测的数据,左侧应该object数据类型,如果是基础数据类型的话会直接返回false。右侧为一个构造函数。
[1,2,3] instanceof === Array // true
new Object() instanceof Array // false不同window或者iframe的对象类型检测不能使用instanceof,即使相同也会返回false
适合自定义对象,也可以用来检测原生对象
三、Object.prototype.toString
每个对象都有toString( )方法
- 一般情况下,js中对象的toString(),返回字符串,内容与函数声明语法有关,例如
[1,2,3].toString() //"1,2,3"
- 大多数都返回函数的完整源码
Array.toString() //"function Array() { [native code] }"
- 内置函数往往返回一个类似"[native code]"的函数体,需要配合call方法,比如
Object.prototype.toString.call([1,2,3]) //"[object Array]"
适合内置对象和基元类型,遇到null和undefined会失效(IE678等返回[object,Object])