javascript中的隐式类型转化
2017-09-16 23:23
260 查看
javascript中的隐式类型转化
#隐式转换
## “+” 字符串和数字
如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作。 如果其中一个操作数是对象(包括数组),则首先对其调用`ToPrimitive`抽象操作,该抽象操作再调用`[[DefaultValue]]`,以数字作为上下文。 `[1,2]+[3,4]=='1,23,4'` 原因,因为数组的valueOf操作无法得到简单的基本类型,于是它转而调用toString。因此上栗得到的是'1,23,4'。
## 布尔值到数字的隐式强制类型转换
```js function onlyOne(){ var sum = 0; for(var i=0;i<arguments.length;i++){ if(arguments[i]){ //跳过假值 undefined也是假值,避免NaN sum+=arguments[i]; } } return sum === 1; } ```## 隐式强制类型转换为布尔值
`undefined null false +0 -0 NaN ""`会被转化为false
# ==和===
> ① `字符串、数字和布尔型的比较都会转换为数字类型进行比较` > ② `特殊的有null和undefined,他们去其它类型比较都为false` > ③ 对象和其它类型比较,都会将对象先转化为`primitive`值然后进行比较## 字符串和数字
`X==Y` 规范: (1)如果Type(x)是数字,Type(y)是字符串,则返回`x==ToNumber(y)`的结果 (2)如果Type(x)是字符串,Type(y)是数字,则返回`ToNumber(x)==y`的结果 > `总而言之,==比较的是两个数字。`## 其它类型和布尔类型之间的相等比较
```js var a = '22'; var b = true; a == b // false var a = '22'; var b = false; a == b // false ``` '22'是一个真值,为什么==的结果不是true呢?很容易掉坑里面。需要重视。 规范: (1)如果Type(x)是布尔值,则返回`ToNumber(x)==y`的结果 (2)如果Type(y)是布尔值,则返回`x==ToNumber(y)`的结果## null和undefined的比较
规范: (1)如果x为`null`,y为`undefined`,结果为`true` (2)如果x为`undefined`,y为`null`,结果为`true` > `只要==一边出现null或者undefined,另一边是其它类型,结果都为false` ```js var a = null; var b; a==b //true a==null//true b==null // true a == false // false b == false // false a == '' //false b == '' //false a == 0 //false b == 0 //false ```## 对象和非对象之间比较
对象(对象|函数|数组)和标量基本类型(字符串|数字|布尔)之间的相等比较。 规范: (1)如果`Type(x)`是字符串或者数字,`Type(y)`是对象,则返回`x == ToPrimitive()`的结果 (2)如果`Type(x)`是对象,`Type(y)`是字符串或者数字,则返回`Toprimitive() == y`的结果相关文章推荐
- JavaScript-01----包装对象、比较、隐式转化、类型检测
- javascript 隐式类型转换
- JavaScript进阶:隐性的类型转化
- javascript--转化字符串为日期类型
- javascript中数据类型的隐式转换
- Javascript学习【类型转化问题总汇】
- JavaScript数据类型隐式转换原则总结(干货!)
- C++ 隐式类类型转化 Implicit Class-Type Conversions
- javascript的数据类型and隐式转换
- javascript的数据类型and隐式转换
- javascript 中“==”带来的隐式类型转换规则
- javascript类型转化加法就不会直接字符相加了
- 「译」JavaScript 的怪癖 1:隐式类型转换
- 有趣的JavaScript隐式类型转换
- JavaScript的隐式类型转换浅析
- JavaScript核心语法————数据类型转化、运算符、表达式
- JavaScript中运算符规则和隐式类型转换示例详解
- JavaScript隐式类型转换
- javascript的数据类型and隐式转换
- javascript的数据类型and隐式转换