03.【JS怪癖1】隐式类型转换

2017-01-05  本文已影响0人  唐唐_sugar

参考资料:JavaScript 的怪癖 1:隐式类型转换

1.布尔值的隐式转换

1.1 转为false

四种情况:

1.2 转为true

其余均转为true

注意:字符串false,带有空格的字符串' ', 字符串‘0’等情况。只要字符串非空,不管里面是什么,都转为true

Boolean('false');  // true
Boolean(' ');   // true
Boolean('0');   // true

2.字符串的隐式转换

2.1 加运算符

只要其中一个操作数是字符串,那么它就执行连接字符串的操作(而不是加法操作,即使它们是数字)

var x = '2';

// 数字1被隐式转换为字符串'1'
console.log(x + 1);  // 不是3,而是21
console.log(1 + x);  // 不是3,而是12

注意: 减运算符可以隐式转换字符串为数字。

var y = '3';

// 字符串'3'被隐式转换为数字3
console.log(y - 1);  // 2
console.log(4 - y);  // 1

2.2 String()

一些看似是false 的值,如果转换成字符串,却成了 true

Boolean(undefined)  // false
String(undefined)  // 'undefined'
Boolean('undefined')  // true

3. 对象的隐式转换

参考: 将所有值都转换成对象JavaScript 并非所有的东西都是对象

在JavaScript中,有两种类型的值,一种是原始值(5个:字符串, 数字, 布尔值, undefined, null), 另一种值是对象( object)

其中,对象可以进一步划分为3种:

  1. 原始值的包装器:BooleanNumberString。很少直接使用。

  2. 用字面量创建的对象。

  1. 日期:new Date("2011-12-24")
补充: 原始类型与包装类型的相互转换

原始值类型 boolean,number 以及 string 都有自己对应的包装类型Boolean, NumberString。 包装类型的实例都是对象值

3.1 将对象转换为数字_(??未理解)

  1. 调用 valueOf()。如果结果是原始值(不是一个对象),则将其转换为一个数字。
  2. 否则,调用 toString()方法。如果结果是原始值,则将其转换为一个数字。
  3. 否则,抛出一个类型错误。

3.2 将对象转换为字符串_(??未理解)

  1. 调用 toString()方法。如果结果是原始值,则将其转换为一个数字。
  2. 否则,调用 valueOf()。如果结果是原始值(不是一个对象),则将其转换为一个数字。
  3. 否则,抛出一个类型错误。
上一篇 下一篇

猜你喜欢

热点阅读