From 26653bee3fd56f555edae98b98cd6bd24887c695 Mon Sep 17 00:00:00 2001 From: qianguyihao Date: Sun, 12 Aug 2018 22:38:05 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=88JS=E5=9F=BA=E7=A1=80=EF=BC=89?= =?UTF-8?q?=EF=BC=9A=E8=BF=90=E7=AE=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../02-JavaScript语法基础:变量.md | 33 +++ .../03-JavaScript语法基础:运算符和表达式.md | 213 ++++++++++++++---- 20-前端综合/2018年-前端日记.md | 4 +- 3 files changed, 198 insertions(+), 52 deletions(-) diff --git a/03-JavaScript基础/02-JavaScript语法基础:变量.md b/03-JavaScript基础/02-JavaScript语法基础:变量.md index f4a73c2..253ef30 100644 --- a/03-JavaScript基础/02-JavaScript语法基础:变量.md +++ b/03-JavaScript基础/02-JavaScript语法基础:变量.md @@ -379,6 +379,22 @@ Undefined和任何数值计算的结果为NaN。NaN 与任何值都不相等, true 和 fase。 +布尔值直接使用就可以了,千万不要加上引号。 + +代码: + +```javascript + var a = true; + console.log(typeof a); +``` + +控制台输出结果: + +``` + boolean +``` + + ## null和undefined ### `null`:空值 @@ -545,6 +561,23 @@ null和undefined有最大的相似性。看看null == undefined的结果(true) 注意:null和undefined这两个值没有toString()方法,所以它们不能用方法二。如果调用,会报错。 + + +另外,Number类型的变量,在调用toString()时,可以在方法中传递一个整数作为参数。此时它将会把数字转换为指定的进制,如果不指定则默认转换为10进制。例如: + +```javascript + var a = 255; + + //对于Number调用toString()时可以在方法中传递一个整数作为参数 + //此时它将会把数字转换为指定的进制,如果不指定则默认转换为10进制 + a = a.toString(2); + + console.log(a); // 11111111 + console.log(typeof a); // string +``` + + + **方法三**:调用String()函数。如下: ``` diff --git a/03-JavaScript基础/03-JavaScript语法基础:运算符和表达式.md b/03-JavaScript基础/03-JavaScript语法基础:运算符和表达式.md index e0eb20c..eee93d9 100644 --- a/03-JavaScript基础/03-JavaScript语法基础:运算符和表达式.md +++ b/03-JavaScript基础/03-JavaScript语法基础:运算符和表达式.md @@ -5,7 +5,6 @@ 我们在[上一篇文章](http://www.cnblogs.com/smyhvae/p/8303507.html)里讲到了JS中**变量**的概念,本篇文章讲一下**运算符**和表达式。 - ## 前言 比如说`+`、`*`、`/`、`(` 都是**运算符**,而`(3+5)/2`则是**表达式**。 @@ -34,7 +33,6 @@ ![](http://img.smyhvae.com/20180117_1651.png) - **求余的举例**: 假设用户输入345,怎么分别得到3、4、5这三个数呢? @@ -75,7 +73,6 @@ 原式 = 1 + 6 % 4 / 3 = 1 + 2 / 3 = 1.66666666666666 - ### 算数运算符的注意事项 (1)当对非Number类型的值进行运算(包括`+`、`-`、`*`、`/`)时,会将这些值转换为Number然后在运算。(注:`Number + 字符串`、`字符串 + 字符串`是特例,稍后再讲) @@ -112,8 +109,6 @@ 我们可以利用这一特点,为一个值`-0`、`*1`、`/1`来将其转换为Number。原理和Number()函数一样,使用起来更加简单。 - - ### 乘方 如果想计算 `a 的 b 次方`,可以使用如下函数: @@ -212,30 +207,134 @@ sqrt即“square 开方”。比如: 原理同上。 -## 布尔值、关系运算符、逻辑运算符 - -### 布尔值 - -我们在上一篇文章中学习到的变量类型中包括:数值型、字符串型。今天再来学习一个类型:**布尔类型**。 - -布尔类型的值,就两个:true、false。 - -布尔值直接使用就可以了,千万不要加上引号。 - -代码: +### 代码举例 ```javascript - var a = true; - console.log(typeof a); -``` + var n1=10; + var n2=20; -控制台输出结果: + var n = n1++; //n1 = 11 n1++ = 10 + + console.log('n='+n); // 10 + console.log('n1='+n1); //11 + + n = ++n1 //n1 = 12 ++n1 =12 + console.log('n='+n); //12 + console.log('n1='+n1); //12 + + n = n2--;// n2=19 n2--=20 + console.log('n='+n); //20 + console.log('n2='+n2); //19 + + n = --n2; //n2=18 --n2 = 18 + console.log('n='+n); //18 + console.log('n2='+n2); //18 ``` - boolean + +## 逻辑运算符 + +逻辑运算符有三个: + +- && 与(且):两个都为真,结果才为真 + +- || 或:只要有一个是真,结果就是真 + +- ! 非:对一个布尔值进行取反。 + +**连比的写法:** + +来看看逻辑运算符连比的写法。 + +举例1: + +``` + console.log(3 < 2 && 2 < 4); ``` -### 关系运算符 +输出结果为false。 + +举例2:(判断一个人的年龄是否在18~60岁之间) + +```javascript + var a = prompt("请输入您的年龄"); + alert(a>=18 && a<= 65); +``` + +### 注意事项 + +(1)能参与逻辑运算的,都是布尔值。 + +(2)JS中的`&&`属于**短路**的与,如果第一个值为false,则不会看第二个值。举例: + +```javascript + //第一个值为true,会检查第二个值 + true && alert("看我出不出来!!"); // 可以弹出 alert 框 + + //第一个值为false,不会检查第二个值 + false && alert("看我出不出来!!"); // 不会弹出 alert 框 +``` + +(3)JS中的`||`属于**短路**的或,如果第一个值为true,则不会看第二个值。举例: + +(4)如果对**非布尔值**进行逻辑运算,则会**先将其转换为布尔值**,然后再操作。举例: + +```javascript + var a = 10; + a = !a; + + console.log(a); // false + console.log(typeof a); // boolean +``` + +上面的例子,我们可以看到,对非布尔值进行`!`操作之后,返回结果为布尔值。 + +### 非布尔值的与或运算【重要】 + +> 之所以重要,是因为在实际开发中,我们经常用这种代码做容错处理。 + +非布尔值进行**与或运算**时,会先将其转换为布尔值,然后再运算,但返回结果是**原值**。比如说: + +```javascript + var result = 1 && 2; // 运算过程:true && true; + console.log('result:' + result); // 打印结果:2 +``` + +上方代码可以看到,虽然运算过程为布尔值的运算,但返回结果是原值。 + +那么,返回结果是哪个原值呢?我们来看一下。 + +**与运算**的返回结果:(以两个非布尔值的运算为例) + +- 如果第一个值为true,则必然返回第二个值 + +- 如果第一个值为false,则直接返回第一个值 + +**或运算**的返回结果:(以两个非布尔值的运算为例) + +- 如果第一个值为true,则直接返回第一个值 + +- 如果第一个值为false,则返回第二个值 + +## 赋值运算符 + +可以将符号右侧的值赋值给符号左侧的变量。 + +举例: + +- `+=`。a += 5 等价于 a = a + 5 + +- `-=`。a -= 5 等价于 a = a - 5 + +- `*=`。a *= 5 等价于 a = a * 5 + +- `/=`。a /= 5 等价于 a = a / 5 + +- `%=`。a %= 5 等价于 a = a % 5 + +## 关系运算符 + +通过关系运算符可以比较两个值之间的大小关系,如果关系成立它会返回true,如果关系不成立则返回false。 关系运算符有很多种,比如: @@ -252,7 +351,19 @@ sqrt即“square 开方”。比如: 关系运算符,得到的结果都是布尔值:要么是true,要么是false。 -**`==`符号的强调**: +### 非数值的比较 + +(1)对于非数值进行比较时,会将其转换为数字然后再比较。 + +(2)特殊情况:如果符号两侧的值都是字符串时,**不会**将其转换为数字进行比较。比较两个字符串时,比较的是字符串的**Unicode编码**。 + +比较字符编码时,是一位一位进行比较。如果两位一样,则比较下一位,所以借用它可以来对英文进行排序。 + +**注意**:在比较两个字符串型的数字时,一定要先转型。 + +(3)任何值和NaN做任何比较都是false。 + +### `==`符号的强调 注意`==`这个符号,它是**判断是否等于**,而不是赋值。 @@ -262,17 +373,32 @@ sqrt即“square 开方”。比如: console.log("我爱你中国" == "我爱你中国"); //输出结果为true ``` -(3)`== `这个符号并不严谨,会将不同类型的东西,转为相同类型进行比较。例如: +(2)`== `这个符号并不严谨,会将不同类型的东西,转为相同类型进行比较。例如: ``` console.log("6" == 6); //true console.log(0 == -0); //true ``` -如果要保证**完全等于**,我们就要用三个等号`===`。例如: - +(3)undefined 衍生自 null,所以这两个值做相等判断时,会返回true。 +```javascript +console.log(undefined == null); //打印结果:true。 ``` + +(4)NaN不和任何值相等,包括他本身。 + +```javascript +console.log(NaN == NaN); //false +``` + +问题:那如果我想判断 b的值是否为NaN,该怎么办呢? + +答案:可以通过isNaN()函数来判断一个值是否是NaN。如果 b 为 NaN,则返回true;否则返回false。 + +(5)如果要保证**完全等于**,我们就要用三个等号`===`。全等不会做类型转换。例如: + +```javascript console.log("6" === 6); //false console.log(6 === 6); //true ``` @@ -285,43 +411,32 @@ sqrt即“square 开方”。比如: 另外还有:**`==`的反面是`!=`,`===`的反面是`!==`。**。例如: -``` +```javascript console.log(3 != 8); //true console.log(3 != "3"); //false,因为3=="3"是true,所以反过来就是false。 console.log(3 !== "3"); //true,应为3==="3"是false,所以反过来是true。 ``` -### 逻辑运算符 -逻辑运算符有三个: +## 三元运算符 -- && 与(且):两个都为真,结果才为真 +三元运算符也叫条件运算符。 -- || 或 - -- ! 非:只要有一个是真,结果就是真 - -能参与逻辑运算的,都是布尔值,得到的答案仍然是布尔值。 - -**连比的写法:** - -来看看逻辑运算符连比的写法。 - -举例1: +语法: ``` - console.log(3 < 2 && 2 < 4); +条件表达式?语句1:语句2; ``` -输出结果为false。 +**执行的流程**: -举例2:(判断一个人的年龄是否在18~60岁之间) +条件运算符在执行时,首先对条件表达式进行求值: -``` - var a = prompt("请输入您的年龄"); - alert(a>=18 && a<= 65); -``` +- 如果该值为true,则执行语句1,并返回执行结果 +- 如果该值为false,则执行语句2,并返回执行结果 + +如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后在运算。 ## 我的公众号 @@ -332,5 +447,3 @@ sqrt即“square 开方”。比如: ![](http://img.smyhvae.com/2016040102.jpg) - - diff --git a/20-前端综合/2018年-前端日记.md b/20-前端综合/2018年-前端日记.md index 5ef28c3..48bb7cf 100644 --- a/20-前端综合/2018年-前端日记.md +++ b/20-前端综合/2018年-前端日记.md @@ -254,7 +254,7 @@ git cherry-pick myLog console.log(50 < num <= 70); ``` -上面的代码,你认为打印的结果是什么?其他,它打印的结果是 true。 +上面的代码,你认为打印的结果是什么?其实,它打印的结果是 true。 如果我们要实现并列条件,千万不要使用 `if(50 < num < 70)`,而是要使用`if(num > 50 && num <=70)`。 @@ -274,7 +274,7 @@ let temp2 = temp.toFixed(2); ``` -上方代码中,`temp2`的结果是0.12,但是请注意,`temp`的类型Number型,而`temp2`的类型确实String型。 +上方代码中,`temp2`的结果是0.12,但是请注意,`temp`的类型Number型,而`temp2`的类型却是String型。