美文网首页
03.【JS怪癖1】隐式类型转换

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

作者: 唐唐_sugar | 来源:发表于2017-01-05 15:08 被阅读0次

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

1.布尔值的隐式转换

1.1 转为false

四种情况:

  • undefined, null
  • Boolean: false
  • Number: -0, +0, NaN
  • String: ''

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. 用字面量创建的对象。

  • []就是 new Array()
  • {} 就是 new Object()
  • function() {} 就是 new Function()
  • /\s*/ 就是 new RegExp("\s*")
  1. 日期:new Date("2011-12-24")
补充: 原始类型与包装类型的相互转换

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

  • 转换为包装类型:new String('abc')
  • 转换为原始类型: new String('abc').valueOf()

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

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

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

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

相关文章

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

    参考资料:JavaScript 的怪癖 1:隐式类型转换 1.布尔值的隐式转换 1.1 转为false 四种情况:...

  • js中的类型转换

    在js中数据转换分为3种:隐式类型转换,强制类型转换,函数转换 1.隐式类型转换 (1):运算符转换 js中的值在...

  • JS里的数据类型转换

    在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。 1, 显式数据类型转换 a:转数字: 1)Numb...

  • 类型转换

    js的类型转换分成显示和隐式,显式转换常用类型转换函数进行转换,隐式最多用在条件判断,通常是把字符转为布尔型。类型...

  • 隐式转换 显示转换

    ####一.隐式转换 **1) 查看数据类型** *typeof* ```js 案例: v...

  • 数据类型转换

    写在前面 C/C++编程中常见数据类型转换,包括隐式类型转换和显式类型转换。 1. 隐式类型转换 隐式类型转换在以...

  • Java Script 类型转换以及运算

    (一)类型转换 1、隐式转换 num 被隐式转换为true 2、显式转换 其他数据类型转(布尔类型)1、数字:0和...

  • JavaScript类型转换

    在js中数据类型转换一般分为两种,即强制类型转换和隐式类型转换(利用js弱变量类型转换)。 强制类型转换 即通过使...

  • 隐式转换的规则

    问题:隐式转换的规则是什么 说起JS的隐式转换规则,我们可以说下JS的基础数据类型 JS的七中类型 我们所熟知的J...

  • Java 学习笔记_2

    1、隐式转换 和 强制类型转换 隐式转换: 又叫自动类型转换。由系统自动完成的类型转换. 从存储范围小的类型到存储...

网友评论

      本文标题:03.【JS怪癖1】隐式类型转换

      本文链接:https://www.haomeiwen.com/subject/gyrzvttx.html