javascript的数据类型

147 阅读3分钟

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,所以返回true

3、类型检测

一、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])

四、constructor