标签:=== 容器 多行 color 强制类型转换 算术 存储 没有 为什么
首先是如何编写JavaScript
代码,说到这,我们首先要来说明一个需要新人们关注的点,因为我们的js
是一门跨平台
的语言,所以说,我们的代码可以运行在不同的平台
之上。这也就导致了可能相同的代码放在不同的平台运行就会有所出入。
这里面说的平台其实被称之为
宿主环境
。
同时,代码在不同的平台上的运行方式也有所不同。
如果运行在服务端
,那么更多的时候我们需要通过命令行的形式去运行,而如果是代码运行在客户端
,则需要通过启动浏览器
来运行代码。
我们在学习的初期建议是在浏览器
中运行代码,减少学习成本。
首先,我们的js
代码可以写在script
标签内部并且将script
标签放在网页的任何位置。
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title></title> <script> // js code ... </script> </head> <body> <script> // js code ... </script> </body> <script> // js code ... </script> </html>
在上面的代码中,我们把包含有js
代码的script
标签放在了head
标签、body
标签、和body
标签之后的位置。从语法的层面来说,上面的这几种写法都是正确的。但是较为推荐的写法是将scirpt
标签放在body
标签的闭合标签的后面。
推荐的原因,是因为js
代码经常需要操作html
标签,而放在后面可以等到html
标签加载完毕之后再来执行js
代码。避免因为html
标签未加载而导致的报错。
js
当中的语句表示js
向宿主环境发送的命令。
例如下面的语句是向页面中输出计算10 + 2
的结果。
document.write(10+2);
在每一条语句的后面都带有一个分号,表示语句结束。
当然js
允许我们将分号省略掉,但是无论是从代码的维护成本还是其他因素考虑,都不建议将每条语句后面的分号省略掉。
需要注意的是,如果分号前面的语句为空,则没有意义。
注释
是任何编程语言当中必不可少的一环。通过注释,可以让我们开发过的代码具有更好的可读性,也能变相的提升后期代码的维护和升级速度。
一般情况下,注释的内容可以包含很多,例如参数信息
,代码功能
、使用方式
等等。
在js
中,注释
分为两种,一种是单行注释
,一种是多行注释
。
单行注释
通过//
表示,一般写在语句的后面或者语句的上方。
// 这里是代码注释
多行注释
通过/**/
的形式来创建,一般写在代码的上方。
/* 这里是多行注释... */
在js
中,直接使用的量,我们称之为叫做直接量
。
例如,在代码中,我们要使用10
,那么这个10
就是一个直接量
。
一般情况下,表达式
需要得到一个结果。
例如10+2
就是一个表达式,我们在创建这个表达式的时候,就希望得到10+2
的结果。
document.write(10+2);// 通过document.write()方法将10+2这个表达式的结果输出到网页当中
我们在编写js
代码的时候,经常需要得到计算的值,用以判断得到的值与我们预期的值是否相符,所以我们需要了解下面的基本的输出方式。
// console.log() 将内容输出到浏览器的控制台 console.log(10+2); // document.write() 将内容输出到网页当中 document.write(10+2);
通常情况下我们通过console.log()
这种形式输出代码我们称之为代码打印
。
在js
中,如果你的代码运行环境是在浏览器
当中,那么就可以使用浏览器
给我们提供的弹窗。
alert(10+2); confirm(10+2); prompt(10+2);
上述的三个弹窗只能够在运行环境为浏览器的情况下使用。
我们上面说到了表达式
,通过表达式
能够得到计算的结果,但是如果我们计算的逻辑较为复杂,那么如果单纯的依赖表达式将会变得不那么方便。
这个时候,就可以使用变量
。
什么是变量
呢?
我们可以把变量
理解为是一个代名词
或者说叫做临时的容器
。
我们可以把一个具体的值存入到变量中。那么此时这个变量就代表着我们这个具体的值。我们如果想要重新的使用这个值,不再需要重新的计算或者其他操作,直接使用变量就可以得到之前存储的这个值。
而想要创建一个变量(也可以说是声明
一个变量),需要通过var
关键字(es6
中通过let
声明)。
var val = 10 + 2;
在上面的代码中,我们创建了一个变量val
,并且使用这个变量val
存储了表达式10+2
的计算结果。那么如果想要第二次使用10+2
的结果,可以直接使用变量val
即可。
在我们使用变量
的时候,还有一点需要理解,变量
之所以叫变量,是因为变量
随时可以根据我们的需要更改其中存储的值。
var a = 10; a = 20; // 当我们重新的向变量中存储数据的时候,不需要再加var console.log(a); // 此时再打印a结果就为20
需要注意的是,上面我们将变量a
内存储的数据由10
变成了20
,在重新存储的过程中,我们并没有使用var
,那么上面的代码就相当于我们将20
的值存储到之前创建的变量a
中。
而如果在重新的存储的过程中使用了var
,如同下面的案例:
var a = 10; // 第一次声明变量a var a = 20; // 再一次通过var声明变量a,并且使用了var consoloe.log(a);
需要注意的是,虽然最后的结果和上面的打印结果相同,但是变量a
本质上已经发生了变化。
如果在重新存储数据的过程中,没有在变量名前面加var,那么相当于是更改变量a中存储的值,而如果前面加了var,则相当于重新的创建了一个变量a,并且存储了20这个数据。
变量提升:
JavaScript
引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部
,这就叫做变量提升(hoisting)。
console.log(a); var a = 1;
上面代码首先使用console.log
方法,在控制台(console)显示变量a
的值。这时变量a
还没有声明和赋值,所以这是一种错误的做法,但是实际上不会报错。因为存在变量提升,真正运行的是下面的代码。
var a; console.log(a); //undefined a = 1;
标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名,以及后面要提到的函数名。JavaScript 语言的标识符对大小写敏感,所以a
和A
是两个不同的标识符。
标识符有一套命名规则,不符合规则的就是非法标识符。JavaScript 引擎遇到非法标识符,就会报错。
简单说,标识符命名规则如下。
$
)和下划线(_
)。0-9
。
变量
用来临时存储数据(如果想要永久的存储数据,需要通过数据库)。而在任何一门编程语言当中,数据都是分为不同类型的。就如同人类也分为男人和女人一样。
下面就来说一下在JavaScript
中数据的不同类型。
在js
当中数据类型分为两类,一类是原始类型
,一类是引用数据类型
。原始类型
又称之为基础数据类型
,引用类型
也称之为对象类型
。
原始类型
的数据包含有下面几个:
引用类型
的数据包含有下面几个:
在计算机科学中,布尔值是一种逻辑数据类型,其值只能为真或假。例如,在JavaScript中,布尔条件 常用于决定执行哪一部分代码(例如在if语句中)或重复(例如在For循环中)。
布尔值
包含有两个值true
和false
。其中true
表示真
,false
表示假
。
例如我们判断一个条件,如果这个条件满足,那么对应着布尔值true
,如果这个条件不满足,那么就对应着布尔值false
。
下列运算符会返回布尔值:
!
(Not)===
,!==
,==
,!=
>
,>=
,<
,<=
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false
,其他值都视为true
。
undefined
null
false
0
NaN
在计算机科学中,空值表示一个引用,该引用通常有意指向不存在或无效的对象或地址。空引用的含义因语言实现而异。
在JavaScript中,null是一个基本值(原始数据)。
Null
类型里面只有一个值,就是null
。
关于null
,你可以把它理解为无
,它表示一个空值。
var a = null;
例如上面的代码当中,你可以理解为此事的变量a表示的值为空。当我们在一些需要传递值的地方,如果我们没有值进行传递,那么就可以传递一个null
,表示传递的值为空。
Undefined
类型当中只有一个值就是undefined
。
在代码的编写过程中,一个没有被赋值的变量的类型就是undefined
。
var a; console.log(a); // 会在浏览器的控制台中输出undefined
Number
类型即为数字类型
。
在MDN
中关于Number
类型的描述如下:
根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(263 -1) 到 263 -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:
+Infinity
,-Infinity
和NaN
(非数值,Not-a-Number)。
JavaScript 内部,所有数字都是以64位浮点数
形式储存,即使整数也是如此。所以,1
与1.0
是相同的,是同一个数。
1 === 1.0 // true
这就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。
由于浮点数
不是精确的值,所以涉及小数的比较和运算要特别小心
0.1 + 0.2 === 0.3 // false 0.3 / 0.1 // 2.9999999999999996 (0.3 - 0.2) === (0.2 - 0.1) // false
将0
个或者任意多
个字符排列起来放在单引号
或者双引号
当中,就是一个字符串(String)
。
var a = "hello,world!"; var b = ‘hello,JavaScript!‘;
上面的变量a
和b
当中存储的数据就是字符串
,其中一个使用了单引号,一个使用了双引号,两者都是合法的。
单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。
在编程语言当中,运算符是处理数据的基本方法,能够根据现有的值得到新的值。
在JavaScript
当中,存在下列的运算符。
顺序是从右向左的进行赋值操作。
下面的列表中包含全部的赋值运算符
。
x = y
x += y
x -= y
x *= y
x /= y
x %= y
x **= y
x <<= y
x >>= y
x >>>= y
x &= y
x ^= y
x |= y
比较运算符包括下列内容:
==
如果两边操作数相等时返回true。!=
如果两边操作数不相等时返回true===
两边操作数相等且类型相同时返回true。!==
两边操作数不相等或类型不同时返回true。>
左边的操作数大于右边的操作数返回true>=
左边的操作数大于或等于右边的操作数返回true<
左边的操作数小于右边的操作数返回true<=
左边的操作数小于或等于右边的操作数返回true在js
当中,除了提供基础的+
,-
,*
,/
以外,还提供了一些其他的运算符,下面是所有的算术运算符:
+
加法运算-
减法运算*
乘法运算/
除法运算%
求余运算(求模运算)++
自增运算--
自减运算+
一元正值符-
一元负值符**
指数运算符逻辑运算符常用于布尔(逻辑)值之间; 当操作数都是布尔值时,返回值也是布尔值。 不过实际上&&
和||
返回的是一个特定的操作数的值,所以当它用于非布尔值的时候,返回值就可能是非布尔值。
下面是逻辑运算符:
(&&)
(||)
(!)
JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。
强制转换主要指使用Number()
、String()
和Boolean()
三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。
使用Number
函数,可以将任意类型的值转化成数值。
// 数值:转换后还是原来的值 Number(324) // 324 // 字符串:如果可以被解析为数值,则转换为相应的数值 Number(‘324‘) // 324 // 字符串:如果不可以被解析为数值,返回 NaN Number(‘324abc‘) // NaN // 空字符串转为0 Number(‘‘) // 0 // 布尔值:true 转成 1,false 转成 0 Number(true) // 1 Number(false) // 0 // undefined:转成 NaN Number(undefined) // NaN // null:转成0 Number(null) // 0
对象:
简单的规则是,Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组。
Number({a: 1}) // NaN Number([1, 2, 3]) // NaN Number([5]) // 5
String
函数可以将任意类型的值转化成字符串,转换规则如下。
(1)原始类型值
String(123) // "123" String(‘abc‘) // "abc" String(true) // "true" String(undefined) // "undefined" String(null) // "null" String({a: 1}) // "[object Object]" String([1, 2, 3]) // "1,2,3"
Boolean()
函数可以将任意类型的值转为布尔值。
它的转换规则相对简单:除了以下五个值的转换结果为false
,其他的值全部为true
。
undefined
null
0
(包含-0
和+0
)NaN
Boolean(undefined) // false Boolean(null) // false Boolean(0) // false Boolean(NaN) // false Boolean(‘‘) // false //注意,所有对象(包括空对象)的转换结果都是true,甚至连false对应的布尔对象new Boolean(false)也是true Boolean({}) // true Boolean([]) // true Boolean(new Boolean(false)) // true
------------恢复内容结束------------
首先是如何编写JavaScript
代码,说到这,我们首先要来说明一个需要新人们关注的点,因为我们的js
是一门跨平台
的语言,所以说,我们的代码可以运行在不同的平台
之上。这也就导致了可能相同的代码放在不同的平台运行就会有所出入。
这里面说的平台其实被称之为
宿主环境
。
同时,代码在不同的平台上的运行方式也有所不同。
如果运行在服务端
,那么更多的时候我们需要通过命令行的形式去运行,而如果是代码运行在客户端
,则需要通过启动浏览器
来运行代码。
我们在学习的初期建议是在浏览器
中运行代码,减少学习成本。
首先,我们的js
代码可以写在script
标签内部并且将script
标签放在网页的任何位置。
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title></title> <script> // js code ... </script> </head> <body> <script> // js code ... </script> </body> <script> // js code ... </script> </html>
在上面的代码中,我们把包含有js
代码的script
标签放在了head
标签、body
标签、和body
标签之后的位置。从语法的层面来说,上面的这几种写法都是正确的。但是较为推荐的写法是将scirpt
标签放在body
标签的闭合标签的后面。
推荐的原因,是因为js
代码经常需要操作html
标签,而放在后面可以等到html
标签加载完毕之后再来执行js
代码。避免因为html
标签未加载而导致的报错。
js
当中的语句表示js
向宿主环境发送的命令。
例如下面的语句是向页面中输出计算10 + 2
的结果。
document.write(10+2);
在每一条语句的后面都带有一个分号,表示语句结束。
当然js
允许我们将分号省略掉,但是无论是从代码的维护成本还是其他因素考虑,都不建议将每条语句后面的分号省略掉。
需要注意的是,如果分号前面的语句为空,则没有意义。
注释
是任何编程语言当中必不可少的一环。通过注释,可以让我们开发过的代码具有更好的可读性,也能变相的提升后期代码的维护和升级速度。
一般情况下,注释的内容可以包含很多,例如参数信息
,代码功能
、使用方式
等等。
在js
中,注释
分为两种,一种是单行注释
,一种是多行注释
。
单行注释
通过//
表示,一般写在语句的后面或者语句的上方。
// 这里是代码注释
多行注释
通过/**/
的形式来创建,一般写在代码的上方。
/* 这里是多行注释... */
在js
中,直接使用的量,我们称之为叫做直接量
。
例如,在代码中,我们要使用10
,那么这个10
就是一个直接量
。
一般情况下,表达式
需要得到一个结果。
例如10+2
就是一个表达式,我们在创建这个表达式的时候,就希望得到10+2
的结果。
document.write(10+2);// 通过document.write()方法将10+2这个表达式的结果输出到网页当中
我们在编写js
代码的时候,经常需要得到计算的值,用以判断得到的值与我们预期的值是否相符,所以我们需要了解下面的基本的输出方式。
// console.log() 将内容输出到浏览器的控制台 console.log(10+2); // document.write() 将内容输出到网页当中 document.write(10+2);
通常情况下我们通过console.log()
这种形式输出代码我们称之为代码打印
。
在js
中,如果你的代码运行环境是在浏览器
当中,那么就可以使用浏览器
给我们提供的弹窗。
alert(10+2); confirm(10+2); prompt(10+2);
上述的三个弹窗只能够在运行环境为浏览器的情况下使用。
我们上面说到了表达式
,通过表达式
能够得到计算的结果,但是如果我们计算的逻辑较为复杂,那么如果单纯的依赖表达式将会变得不那么方便。
这个时候,就可以使用变量
。
什么是变量
呢?
我们可以把变量
理解为是一个代名词
或者说叫做临时的容器
。
我们可以把一个具体的值存入到变量中。那么此时这个变量就代表着我们这个具体的值。我们如果想要重新的使用这个值,不再需要重新的计算或者其他操作,直接使用变量就可以得到之前存储的这个值。
而想要创建一个变量(也可以说是声明
一个变量),需要通过var
关键字(es6
中通过let
声明)。
var val = 10 + 2;
在上面的代码中,我们创建了一个变量val
,并且使用这个变量val
存储了表达式10+2
的计算结果。那么如果想要第二次使用10+2
的结果,可以直接使用变量val
即可。
在我们使用变量
的时候,还有一点需要理解,变量
之所以叫变量,是因为变量
随时可以根据我们的需要更改其中存储的值。
var a = 10; a = 20; // 当我们重新的向变量中存储数据的时候,不需要再加var console.log(a); // 此时再打印a结果就为20
需要注意的是,上面我们将变量a
内存储的数据由10
变成了20
,在重新存储的过程中,我们并没有使用var
,那么上面的代码就相当于我们将20
的值存储到之前创建的变量a
中。
而如果在重新的存储的过程中使用了var
,如同下面的案例:
var a = 10; // 第一次声明变量a var a = 20; // 再一次通过var声明变量a,并且使用了var consoloe.log(a);
需要注意的是,虽然最后的结果和上面的打印结果相同,但是变量a
本质上已经发生了变化。
如果在重新存储数据的过程中,没有在变量名前面加var,那么相当于是更改变量a中存储的值,而如果前面加了var,则相当于重新的创建了一个变量a,并且存储了20这个数据。
变量提升:
JavaScript
引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部
,这就叫做变量提升(hoisting)。
console.log(a); var a = 1;
上面代码首先使用console.log
方法,在控制台(console)显示变量a
的值。这时变量a
还没有声明和赋值,所以这是一种错误的做法,但是实际上不会报错。因为存在变量提升,真正运行的是下面的代码。
var a; console.log(a); //undefined a = 1;
标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名,以及后面要提到的函数名。JavaScript 语言的标识符对大小写敏感,所以a
和A
是两个不同的标识符。
标识符有一套命名规则,不符合规则的就是非法标识符。JavaScript 引擎遇到非法标识符,就会报错。
简单说,标识符命名规则如下。
$
)和下划线(_
)。0-9
。
变量
用来临时存储数据(如果想要永久的存储数据,需要通过数据库)。而在任何一门编程语言当中,数据都是分为不同类型的。就如同人类也分为男人和女人一样。
下面就来说一下在JavaScript
中数据的不同类型。
在js
当中数据类型分为两类,一类是原始类型
,一类是引用数据类型
。原始类型
又称之为基础数据类型
,引用类型
也称之为对象类型
。
原始类型
的数据包含有下面几个:
引用类型
的数据包含有下面几个:
在计算机科学中,布尔值是一种逻辑数据类型,其值只能为真或假。例如,在JavaScript中,布尔条件 常用于决定执行哪一部分代码(例如在if语句中)或重复(例如在For循环中)。
布尔值
包含有两个值true
和false
。其中true
表示真
,false
表示假
。
例如我们判断一个条件,如果这个条件满足,那么对应着布尔值true
,如果这个条件不满足,那么就对应着布尔值false
。
下列运算符会返回布尔值:
!
(Not)===
,!==
,==
,!=
>
,>=
,<
,<=
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false
,其他值都视为true
。
undefined
null
false
0
NaN
在计算机科学中,空值表示一个引用,该引用通常有意指向不存在或无效的对象或地址。空引用的含义因语言实现而异。
在JavaScript中,null是一个基本值(原始数据)。
Null
类型里面只有一个值,就是null
。
关于null
,你可以把它理解为无
,它表示一个空值。
var a = null;
例如上面的代码当中,你可以理解为此事的变量a表示的值为空。当我们在一些需要传递值的地方,如果我们没有值进行传递,那么就可以传递一个null
,表示传递的值为空。
Undefined
类型当中只有一个值就是undefined
。
在代码的编写过程中,一个没有被赋值的变量的类型就是undefined
。
var a; console.log(a); // 会在浏览器的控制台中输出undefined
Number
类型即为数字类型
。
在MDN
中关于Number
类型的描述如下:
根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(263 -1) 到 263 -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:
+Infinity
,-Infinity
和NaN
(非数值,Not-a-Number)。
JavaScript 内部,所有数字都是以64位浮点数
形式储存,即使整数也是如此。所以,1
与1.0
是相同的,是同一个数。
1 === 1.0 // true
这就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。
由于浮点数
不是精确的值,所以涉及小数的比较和运算要特别小心
0.1 + 0.2 === 0.3 // false 0.3 / 0.1 // 2.9999999999999996 (0.3 - 0.2) === (0.2 - 0.1) // false
将0
个或者任意多
个字符排列起来放在单引号
或者双引号
当中,就是一个字符串(String)
。
var a = "hello,world!"; var b = ‘hello,JavaScript!‘;
上面的变量a
和b
当中存储的数据就是字符串
,其中一个使用了单引号,一个使用了双引号,两者都是合法的。
单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。
在编程语言当中,运算符是处理数据的基本方法,能够根据现有的值得到新的值。
在JavaScript
当中,存在下列的运算符。
顺序是从右向左的进行赋值操作。
下面的列表中包含全部的赋值运算符
。
x = y
x += y
x -= y
x *= y
x /= y
x %= y
x **= y
x <<= y
x >>= y
x >>>= y
x &= y
x ^= y
x |= y
比较运算符包括下列内容:
==
如果两边操作数相等时返回true。!=
如果两边操作数不相等时返回true===
两边操作数相等且类型相同时返回true。!==
两边操作数不相等或类型不同时返回true。>
左边的操作数大于右边的操作数返回true>=
左边的操作数大于或等于右边的操作数返回true<
左边的操作数小于右边的操作数返回true<=
左边的操作数小于或等于右边的操作数返回true在js
当中,除了提供基础的+
,-
,*
,/
以外,还提供了一些其他的运算符,下面是所有的算术运算符:
+
加法运算-
减法运算*
乘法运算/
除法运算%
求余运算(求模运算)++
自增运算--
自减运算+
一元正值符-
一元负值符**
指数运算符逻辑运算符常用于布尔(逻辑)值之间; 当操作数都是布尔值时,返回值也是布尔值。 不过实际上&&
和||
返回的是一个特定的操作数的值,所以当它用于非布尔值的时候,返回值就可能是非布尔值。
下面是逻辑运算符:
(&&)
(||)
(!)
JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。
强制转换主要指使用Number()
、String()
和Boolean()
三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。
使用Number
函数,可以将任意类型的值转化成数值。
// 数值:转换后还是原来的值 Number(324) // 324 // 字符串:如果可以被解析为数值,则转换为相应的数值 Number(‘324‘) // 324 // 字符串:如果不可以被解析为数值,返回 NaN Number(‘324abc‘) // NaN // 空字符串转为0 Number(‘‘) // 0 // 布尔值:true 转成 1,false 转成 0 Number(true) // 1 Number(false) // 0 // undefined:转成 NaN Number(undefined) // NaN // null:转成0 Number(null) // 0
对象:
简单的规则是,Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组。
Number({a: 1}) // NaN Number([1, 2, 3]) // NaN Number([5]) // 5
String
函数可以将任意类型的值转化成字符串,转换规则如下。
(1)原始类型值
String(123) // "123" String(‘abc‘) // "abc" String(true) // "true" String(undefined) // "undefined" String(null) // "null" String({a: 1}) // "[object Object]" String([1, 2, 3]) // "1,2,3"
Boolean()
函数可以将任意类型的值转为布尔值。
它的转换规则相对简单:除了以下五个值的转换结果为false
,其他的值全部为true
。
undefined
null
0
(包含-0
和+0
)NaN
Boolean(undefined) // false Boolean(null) // false Boolean(0) // false Boolean(NaN) // false Boolean(‘‘) // false //注意,所有对象(包括空对象)的转换结果都是true,甚至连false对应的布尔对象new Boolean(false)也是true Boolean({}) // true Boolean([]) // true Boolean(new Boolean(false)) // true
------------恢复内容结束------------
------------恢复内容结束------------
------------恢复内容结束------------
标签:=== 容器 多行 color 强制类型转换 算术 存储 没有 为什么
原文地址:https://www.cnblogs.com/wuziqiang/p/11916961.html