JavaScript中运算符规则和隐式类型转换示例详解

本文主要给大家介绍了关于JavaScript运算符规则和隐式类型转换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

隐式类型转换

在 JavaScript 中,当我们进行比较操作或者加减乘除四则运算操作时,常常会触发 JavaScript 的隐式类型转换机制;而这部分也往往是令人迷惑的地方。譬如浏览器中的 console.log 操作常常会将任何值都转化为字符串然后展示,而数学运算则会首先将值转化为数值类型(除了 Date 类型对象)然后进行操作。

我们首先来看几组典型的 JavaScript 中运算符操作结果,希望阅读完本部分之后能够对每一个条目都能进行合理解释:

// 比较 [] == ![] // true NaN !== NaN // true 1 == true // true 2 == true // false "2" == true // flase null > 0 // false null < 0 // false null == 0 // false null >= 0 // true // 加法 true + 1 // 1 undefined + 1 // NaN let obj = {}; {} + 1 // 1,这里的 {} 被当成了代码块 { 1 + 1 } + 1 // 1 obj + 1 // [object Object]1 {} + {} // Chrome 上显示 "[object Object][object Object]",Firefox 显示 NaN [] + {} // [object Object] [] + a // [object Object] + [] // 等价于 + "" => 0 {} + [] // 0 a + [] // [object Object] [2,3] + [1,2] // '2,31,2' [2] + 1 // '21' [2] + (-1) // "2-1" // 减法或其他操作,无法进行字符串连接,因此在错误的字符串格式下返回 NaN [2] - 1 // 1 [2,3] - 1 // NaN {} - 1 // -1

原始类型间转换

JavaScript 中我们常说的原始类型包括了数值类型、字符串类型、布尔类型与空类型这几种;而我们常用的原始类型之间的转换函数就是 String、Number 与 Boolean:

// String let value = true; console.log(typeof value); // boolean value = String(value); // now value is a string "true" console.log(typeof value); // string // Number let str = "123"; console.log(typeof str); // string let num = Number(str); // becomes a number 123 console.log(typeof num); // number let age = Number("an arbitrary string instead of a number"); console.log(age); // NaN, conversion failed // Boolean console.log( Boolean(1) ); // true console.log( Boolean(0) ); // false console.log( Boolean("hello") ); // true console.log( Boolean("") ); // false

最终,我们可以得到如下的 JavaScript 原始类型转换表(包括复合类型向原始类型转换的范例):

原始值 转化为数值类型 转化为字符串类型 转化为 Boolean 类型
false   0   "false"   false  
true   1   "true"   true  
0   0   "0"   false  
1   1   "1"   true  
"0"   0   "0"   true  
"1"   1   "1"   true  
NaN   NaN   "NaN"   false  
Infinity   Infinity   "Infinity"   true  
-Infinity   -Infinity   "-Infinity"   true  
""   0   ""   false  
"20"   20   "20"   true  
"twenty"   NaN   "twenty"   true  
[ ]   0   ""   true  
[20]   20   "20"   true  
[10,20]   NaN   "10,20"   true  
["twenty"]   NaN   "twenty"   true  
["ten","twenty"]   NaN   "ten,twenty"   true  
function(){}   NaN   "function(){}"   true  
{ }   NaN   "[object Object]"   true  
null   0   "null"   false  
undefined   NaN   "undefined"   false  

ToPrimitive

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wygdzy.html