JS中的类型以及类型转换

在文章开始,先提一个问题,在JS中,1+‘1’-1的值是多少?答案可以在文章中找到。

JS存在以下几种数据类型:Number, String, Object, Function, Null, Undefined, Boolean, Array, Date, Expression, Error. 

Null是一种空值. var i = null; 如果使用var i; 则i为undefined. 声明过但没有赋值的变量都为undefined.
Error跟java中的exception类似,使用throw, try-catch对其操作。
Expression为正则表达式。

不同的数据类型在计算,比较和赋值时,可以进行类型转换。所有的类型可以向String, Number, Boolean和Object进行转换,下面表格为转换的准则,此表格引自JS权威书籍。

JS中的类型以及类型转换_第1张图片

数据类型判断当前运算的上下文需要什么类型,如果类型不符合,则进行相应的类型转换。比如'2'*3,上下文需要Number进行乘法,'2'将转换成Number.

有的时候,当前运算上下文可能会有多种解释,比如1+'1', +可以是Number运算,也可以是String拼接。那应该转换谁呢?

+, 当运算的一边出现String的时候,则优先选择String运算。如果为Object,则尝试调用Object的valueOf()或者toString().
==, 当运算符两边是Number和String,则转换String为Number。运算符一边是Boolean,转true为1,转false为0。Null和Undefined相等。如果Object1===Object2,则Object1==Object2,否则调用Object的valueOf()或者toString()转为primitive类型。NaN与任何东西比较都返回false。
>,>=,<,<=, 运算符两边只接受Number,String两种数据的比较。如果两边同为Number,则按照Number比较,如果两边同为String,则按照字母顺序来比较。如果两边同时具有Number和String,则将String转换为Number。如果数据类型不是Number或者String,则转换为Number或者String。NaN与任何东西比较都返回false。

根据上面的规则,1+'1'-'1'应该等于10,1==true, 0<true, '1'==true. 大家可以去试试。

JS里面的变量以primitive type和reference type区分。在赋值,传值和比较时,使用的是value还是reference,以下表为准:

Type Copied by Passed by Compared by
Number Value Value Value
Boolean Value Value Value
String Immutable Immutable Value
Object Reference Reference Reference

 

你可能感兴趣的:(js,dataType)