diff --git a/03-JavaScript基础/03-JavaScript语法基础:强制类型转换.md b/03-JavaScript基础/03-JavaScript语法基础:强制类型转换.md index 729e9b5..9f72a28 100644 --- a/03-JavaScript基础/03-JavaScript语法基础:强制类型转换.md +++ b/03-JavaScript基础/03-JavaScript语法基础:强制类型转换.md @@ -193,7 +193,7 @@ parseFloat()和parseInt()的作用类似,不同的是,parseFloat()可以获 ## 转换为Boolean -将其他的数据类型转换为Boolean,可以使用**Boolean()**函数。 +将其他的数据类型转换为Boolean,可以使用Boolean()函数。 - 情况一:数字 --> 布尔。除了0和NaN,其余的都是true。 diff --git a/03-JavaScript基础/04-JavaScript语法基础:运算符和表达式.md b/03-JavaScript基础/04-JavaScript语法基础:运算符和表达式.md index eee93d9..c8292ef 100644 --- a/03-JavaScript基础/04-JavaScript语法基础:运算符和表达式.md +++ b/03-JavaScript基础/04-JavaScript语法基础:运算符和表达式.md @@ -75,7 +75,7 @@ ### 算数运算符的注意事项 -(1)当对非Number类型的值进行运算(包括`+`、`-`、`*`、`/`)时,会将这些值转换为Number然后在运算。(注:`Number + 字符串`、`字符串 + 字符串`是特例,稍后再讲) +(1)当对非Number类型的值进行运算(包括`+`、`-`、`*`、`/`)时,会将这些值转换为Number然后再运算。(注:`字符串 + Number`、`字符串 + 字符串`是特例,稍后再讲) 比如: @@ -89,9 +89,8 @@ result4 = 100 - '1' // 99 ``` -另外,我们可以利用这一特点 -(2)任何值和NaN做运算都得NaN。 +(2)任何值和NaN做运算的结果都是NaN。 (3)任何的值和字符串做加法运算,都会先转换为字符串,然后再做拼串操作。 @@ -103,7 +102,9 @@ result2 = '1' + 2 + 3; // 123 ``` -我们可以利用这一特点,来将一个任意的数据类型转换为String:我们只需要为任意的数据类型 + 一个 "" 即可将其转换为String。这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用String()函数。 +我们可以利用这一特点,来将一个任意的数据类型转换为String:我们只需要为任意的数据类型 + 一个 "" 即可将其转换为String。这是一种**隐式**的类型转换,由浏览器自动完成,实际上它也是调用String()函数。也就是说,`c = c + ""` 等价于 `c = String(c)`。 + + (4)任何值做`-`、`*`、`/`运算时都会自动转换为Number。 @@ -159,6 +160,20 @@ sqrt即“square 开方”。比如: 一元运算符,只需要一个操作数。 +常见的一元运算符如下。 + +### typeof + +typeof就是典型的一元运算符,因为后面只跟一个操作数。 + +举例如下: + +```javascript +var a = '123'; +console.log(typeof a); // 打印结果:string +``` + + ### 正号 `+` (1)正号不会对数字产生任何影响。比如说,`2`和`+2`是一样的。 @@ -181,7 +196,9 @@ sqrt即“square 开方”。比如: 打印结果: -20180811_2245.png + +![](http://img.smyhvae.com/20181221_2050.png) + ### 负号 `-` @@ -236,11 +253,11 @@ sqrt即“square 开方”。比如: 逻辑运算符有三个: -- && 与(且):两个都为真,结果才为真 +- `&&` 与(且):两个都为真,结果才为真。 -- || 或:只要有一个是真,结果就是真 +- `||` 或:只要有一个是真,结果就是真。 -- ! 非:对一个布尔值进行取反。 +- `!` 非:对一个布尔值进行取反。 **连比的写法:** @@ -261,6 +278,9 @@ sqrt即“square 开方”。比如: alert(a>=18 && a<= 65); ``` + +PS:上面的这个`a>=18 && a<= 65`千万别想当然的写成` 18<= a <= 65`啊,没有这种语法。 + ### 注意事项 (1)能参与逻辑运算的,都是布尔值。 @@ -296,8 +316,8 @@ sqrt即“square 开方”。比如: 非布尔值进行**与或运算**时,会先将其转换为布尔值,然后再运算,但返回结果是**原值**。比如说: ```javascript - var result = 1 && 2; // 运算过程:true && true; - console.log('result:' + result); // 打印结果:2 + var result = 5 && 6; // 运算过程:true && true; + console.log('result:' + result); // 打印结果:6(也就是说最后面的那个值。) ``` 上方代码可以看到,虽然运算过程为布尔值的运算,但返回结果是原值。 @@ -306,7 +326,7 @@ sqrt即“square 开方”。比如: **与运算**的返回结果:(以两个非布尔值的运算为例) -- 如果第一个值为true,则必然返回第二个值 +- 如果第一个值为true,则必然返回第二个值(所以说,如果所有的值都为true,则返回的是最后一个值) - 如果第一个值为false,则直接返回第一个值 @@ -349,17 +369,47 @@ sqrt即“square 开方”。比如: !== 不全等于 ``` -关系运算符,得到的结果都是布尔值:要么是true,要么是false。 +**关系运算符,得到的结果都是布尔值:要么是true,要么是false**。 + +举例如下: + +```javascript +var result = 5 > 10; // false +``` ### 非数值的比较 (1)对于非数值进行比较时,会将其转换为数字然后再比较。 -(2)特殊情况:如果符号两侧的值都是字符串时,**不会**将其转换为数字进行比较。比较两个字符串时,比较的是字符串的**Unicode编码**。 +举例如下: + +```javascript + console.log(1 > true); //false + console.log(1 >= true); //true + console.log(1 > "0"); //true + + //console.log(10 > null); //true + + //任何值和NaN做任何比较都是false + + console.log(10 <= "hello"); //false + console.log(true > false); //true + +``` + +(2)特殊情况:如果符号两侧的值都是字符串时,**不会**将其转换为数字进行比较。比较两个字符串时,比较的是字符串的**Unicode编码**。【非常重要,这里是个大坑】 比较字符编码时,是一位一位进行比较。如果两位一样,则比较下一位,所以借用它可以来对英文进行排序。 -**注意**:在比较两个字符串型的数字时,一定要先转型。 +PS:所以说,当你尝试去比较`"123"`和`"56"`这两个字符串时,你会发现,字符串"56"竟然比字符串"123"要大。也就是说,下面这样代码的打印结果,其实是true:(这个我们一定要注意,在日常开发中,很容易忽视) + +```javascript +// 比较两个字符串时,比较的是字符串的字符编码,所以可能会得到不可预期的结果 +console.log("56" > "123"); // true +``` + +**因此**:当我们在比较两个字符串型的数字时,**一定一定要先转型**,比如 `parseInt()`。 + (3)任何值和NaN做任何比较都是false。