From f1369346763e6935e959dc73b7f6bd9f1ec0f562 Mon Sep 17 00:00:00 2001 From: qianguyihao Date: Thu, 12 Dec 2019 15:04:44 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E5=8F=98=E9=87=8F=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04-JavaScript基础/02-变量.md | 22 ++++- 04-JavaScript基础/03-变量的数据类型.md | 97 +++++++++++-------- ...类型转换.md => 04-typeof和变量的数据类型转换.md} | 51 +++++++--- 3 files changed, 116 insertions(+), 54 deletions(-) rename 04-JavaScript基础/{04-typeof和变量的强制类型转换.md => 04-typeof和变量的数据类型转换.md} (88%) diff --git a/04-JavaScript基础/02-变量.md b/04-JavaScript基础/02-变量.md index 800abc3..3cdf699 100644 --- a/04-JavaScript基础/02-变量.md +++ b/04-JavaScript基础/02-变量.md @@ -3,7 +3,13 @@ “字面量”即**常量**,是固定值,不可改变。看见什么,它就是什么。 -简单的字面量有2种:数字、字符串。 +字面量有3种: + +- 数字 + +- 字符串 + +- 布尔字面量 (1)数值的字面量非常简单,写上去就行了,不需要任何的符号。例如: @@ -21,6 +27,14 @@ 温馨提示:100是数字,"100"是字符串。 +(3)布尔字面量举例: + +```javascript +if (true) { + console.log('如果为真,就走这里面的代码); +} +``` + ### 总结 字面量都可以直接使用,但是我们一般不会直接使用字面量。 @@ -33,7 +47,7 @@ ## 变量的概念 -**变量**是用于存放数据的容器。我们通过「变量名」获取数据,甚至可以修改数据。 +**变量**:是用于存放数据的容器。我们通过「变量名」获取数据,甚至可以修改数据。 变量还可以用来保存字面量。 @@ -43,13 +57,13 @@ ### 变量的声明(变量的定义) -在ES6之前,统一使用`var`关键字来声明一个变量。比如: +在ES6语法之前,统一使用`var`关键字来声明一个变量。比如: ```javascript var name; // 生命一个名为 name 的变量 ``` -补充:在ES6及之后,统一使用 `const`、`let`关键字来声明一个变量。这个以后再讲。 +补充:在ES6语法及之后,统一使用 `const`、`let`关键字来声明一个变量。这个以后再讲。 ### 变量的赋值 diff --git a/04-JavaScript基础/03-变量的数据类型.md b/04-JavaScript基础/03-变量的数据类型.md index 040a7cb..75b678d 100644 --- a/04-JavaScript基础/03-变量的数据类型.md +++ b/04-JavaScript基础/03-变量的数据类型.md @@ -147,7 +147,7 @@ var str = 'hello"; // 报错:Uncaught SyntaxError: Invalid or unexpected toke console.log(str4.length); // 25 ``` -由此可见,在字符串的 length 属性,在判断字符串的长度时,会认为: +由此可见,字符串的 length 属性,在判断字符串的长度时,会认为: - 一个中文算一个字符,一个英文算一个字符 @@ -157,30 +157,51 @@ var str = 'hello"; // 报错:Uncaught SyntaxError: Invalid or unexpected toke ### 字符串拼接 +多个字符串之间可以使用加号 `+` 进行拼接。 -## 补充知识:typeof 运算符 - -`typeof`表示“**获取变量的类型**”,返回的是小写,语法为: +**拼接语法**: ``` -typeof 变量 +字符串 + 任意数据类型 = 拼接之后的新字符串; ``` -**返回结果**: +**拼接规则**:拼接前,会把与字符串相加的这个数据类型转成字符串,然后再拼接成一个新的字符串。 -- `typeof 数值`的返回结果:number +**代码举例**:(字符串与六大数据类型相加) -- `typeof 字符串`的返回结果:string +```javascript +var str1 = '千古壹号' + '永不止步'; +var str2 = '千古壹号' + 666; +var str3 = '千古壹号' + true; +var str4 = '千古壹号' + null; +var str5 = '千古壹号' + undefined; -- `typeof 布尔型`的返回结果:boolean +var obj = { name: '千古壹号', age: 28 }; +var str6 = '千古壹号' + obj; -- `typeof undefined`的返回结果:undefined +console.log(str1); +console.log(str2); +console.log(str3); +console.log(str4); +console.log(str5); +console.log(str6); +``` -- `typeof null`的返回结果:object +打印结果: -在JavaScript中,只要是数,就是 number 数值型的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是 number 类型的。 +``` +千古壹号永不止步 -关于 typeof 的知识,下一篇文章,我们会详细讲。 +千古壹号666 + +千古壹号true + +千古壹号null + +千古壹号undefined + +千古壹号[object Object] +``` ## 数值型:Number @@ -188,18 +209,23 @@ typeof 变量 在JS中所有的数值都是Number类型,包括整数和浮点数(小数)。 ```javascript - var a = 100; //定义了一个变量a,并且赋值100 - console.log(typeof a); //输出a变量的类型 + var a = 100; // 定义一个变量 a,并且赋值整数100 + console.log(typeof a); // 输出变量 a 的类型 + + var b = 12.3; // 定义一个变量 b,并且赋值浮点数 12.3 + console.log(typeof a); ``` 上方代码的输出结果为: ``` +number + number ``` -**数值范围:** +### 数值范围 由于内存的限制,ECMAScript 并不能保存世界上所有的数值。 @@ -207,7 +233,7 @@ number - 最小值:`Number.MIN_VALUE`,这个值为: 5e-324 -如果使用Number表示的变量超过了最大值,则会返回Infinity。 +如果使用 Number 表示的变量超过了最大值,则会返回Infinity。 - 无穷大(正无穷):Infinity @@ -216,9 +242,9 @@ number 注意:`typeof Infinity`的返回结果是number。 -**NaN和isNaN()函数:** +### NaN -(1)NaN:是一个特殊的数字,表示Not a Number,非数值。比如: +**NaN**:是一个特殊的数字,表示Not a Number,非数值。比如: ```javascript console.log("abc" / 18); //结果是NaN @@ -226,20 +252,13 @@ number console.log("abc" * "abcd"); //按理说,字符串相乘是没有结果的,但如果你非要让JS去算,它就一定会给你一个结果。结果是NaN ``` -注意:`typeof NaN`的返回结果是number。 +注意:`typeof NaN`的返回结果是 number。 -Undefined和任何数值计算的结果为NaN。NaN 与任何值都不相等,包括 NaN 本身。 +Undefined和任何数值计算的结果为 NaN。NaN 与任何值都不相等,包括 NaN 本身。 -(2)isNaN() :任何不能被转换为数值的值,都会让这个函数返回 true。 +另外,关于 isNaN() 函数,可以看下一篇文章。 -```javascript - isNaN(NaN);// true - isNaN("blue"); // true - isNaN(123); // false - -``` - -**浮点数的运算**: +### 浮点数的运算 在JS中,整数的运算**基本**可以保证精确;但是**小数的运算,可能会得到一个不精确的结果**。所以,千万不要使用JS进行对精确度要求比较高的运算。 @@ -310,7 +329,7 @@ a2 我们知道,`"2"+1`得到的结果其实是字符串,但是`"2"-1`得到的结果却是数值1,这是因为计算机自动帮我们进行了“**隐式转换**”。 -也就是说,`-`、`*`、`/`、`%``这几个符号会自动进行隐式转换。例如: +也就是说,`-`、`*`、`/`、`%`这几个符号会自动进行隐式转换。例如: ```javascript var a = "4" + 3 - 6; @@ -328,7 +347,7 @@ console.log(a); ## 布尔值:Boolean -true 和 false。主要用来做逻辑判断。 +布尔型有两个值:true 和 false。主要用来做逻辑判断: true 表示真,false 表示假。 布尔值直接使用就可以了,千万不要加上引号。 @@ -345,28 +364,28 @@ console.log(typeof a); boolean ``` +布尔型和数字型相加时, true 按 1 来算 ,false 按 0 来算。 -## null和undefined + +## Null 和 Undefined ### `null`:空值 专门用来表示一个为空的**对象**(例如:`var a = null`)。注意,专门用来表示**空对象**。 - -- Null类型的值只有一个,就是null。比如:`var a = null`。 - +- Null类型的值只有一个,就是null。比如 `var a = null`。 - 使用 typeof 检查一个null值时,会返回object。 ### `undefined`:未定义 -**声明**了一个变量,但是没有**赋值**(例如:`var a;`),此时它的值就是undefined。 +**声明**了一个变量,但是没有**赋值**(例如:`var a;`),此时它的值就是 `undefined`。 -- Undefined类型的值只有一个,就是undefind +- Undefined类型的值只有一个,就是undefind。比如 - 使用 type of 检查一个undefined时,会返回undefined。 -null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。 +null和undefined有很大的相似性。看看null == undefined的结果(true)也就更加能说明这点。 但是null === undefined的结果(false)。它们虽然相似,但还是有区别的,其中一个区别是:和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。 diff --git a/04-JavaScript基础/04-typeof和变量的强制类型转换.md b/04-JavaScript基础/04-typeof和变量的数据类型转换.md similarity index 88% rename from 04-JavaScript基础/04-typeof和变量的强制类型转换.md rename to 04-JavaScript基础/04-typeof和变量的数据类型转换.md index 7012855..66112dd 100644 --- a/04-JavaScript基础/04-typeof和变量的强制类型转换.md +++ b/04-JavaScript基础/04-typeof和变量的数据类型转换.md @@ -1,21 +1,29 @@ ## 前言 -强制类型转换:将一个数据类型强制转换为其他的数据类型。 +**数据类型转换**:将一种数据类型转换为另外一种数据类型。 -类型转换主要指,将指定的数据类型,转换为:String、Number、Boolean。你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。 +通常有三种类型的转换: + +- 转换为字符串类型 + +- 转换为数字型 + +- 转换为布尔型 + +你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。 ## typeof 运算符 > 我们先来讲一下 typeof,再讲类型转换。 -`typeof()`表示“**获取变量的类型**”,返回的是小写,语法为:(两种写法都可以) +`typeof()`表示“**获取变量的数据类型**”,返回的是小写,语法为:(两种写法都可以) ```javascript // 写法1 typeof 变量; // 写法2 -typeof 变量; +typeof(变量); ``` typeof 这个运算符的返回结果就是变量的类型。那返回结果的类型是什么呢?是字符串。 @@ -36,6 +44,8 @@ typeof 这个运算符的返回结果就是变量的类型。那返回结果的 备注 2:为啥 `typeof null`的返回值也是 object 呢?因为 null 代表的是**空对象**。 +备注 3:`typeof NaN`的返回值是 number,上一篇文章中讲过,NaN 是一个特殊的数字。 + **返回结果举例**: ```javascript @@ -46,6 +56,8 @@ console.log(type {}); // 空对象的打印结果:object 代码解释:这里的空数组`[]`、空对象`{}` ,为啥他们在使用 typeof 时,返回值也是 `object`呢?因为这里的 返回结果`object`指的是**引用数据类型**。空数组、空对象都是**引用数据类型 Object**。 + + ## 变量的类型转换的分类 类型转换分为两种:显示类型转换、隐式类型转换。 @@ -190,15 +202,15 @@ parseInt()的转换情况如下。 - 3.如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。 -**情况二:布尔 --> 数字** +**情况二:Boolean --> 数字** - 结果为:NaN -**情况三:null --> 数字** +**情况三:Null --> 数字** - 结果为:NaN -**情况四:undefined --> 数字** +**情况四:Undefined --> 数字** - 结果为:NaN @@ -359,7 +371,7 @@ console.log(a); // 打印结果:56。这个地方要好好理解。 isNaN(参数); ``` -解释:判断指定的参数是否为 NaN,返回结果为 Boolean 类型。 +解释:判断指定的参数是否为 NaN(非数字类型),返回结果为 Boolean 类型。也就是说:**任何不能被转换为数值的参数,都会让这个函数返回 true**。 **执行过程**: @@ -377,6 +389,8 @@ console.log(isNaN('abc')); // 返回结果:true。因为 Number('abc') 的返 console.log(isNaN(null)); // 返回结果:false console.log(isNaN(undefined)); // 返回结果:true + +console.log(isNaN(NaN)); // 返回结果:true ``` ### 自增/自减运算符:`++`、`—-` @@ -427,7 +441,21 @@ console.log(b); // 打印结果:666 ### 加号:`+` -加号在做隐式类型转换时,有一个特点:当加号的两边,只要有一个是字符串的时候,就会调用 String() 函数,导致最终的运算结果是字符串。 +**情况一**:字符串 + 数字 + +- 当加号的两边,只要有一个是字符串的时候,就会调用 String() 函数,将数字转为字符串再计算。导致最终的运算结果是字符串。 + +**情况二**:Boolean + 数字 + +- Boolean 型和数字型相加时, true 按 1 来算 ,false 按 0 来算。这里其实是先调 Number() 函数,将 Boolean 类型转换为 Number类型,然后再和 数字相加。 + +**情况三**: null + 数字 + +- 等价于:0 + 数字 + +**情况四**: undefined + 数字 + +- 计算结果:NaN ### 运算符:`-`、`*`、`/` @@ -437,8 +465,9 @@ console.log(b); // 打印结果:666 ## 我的公众号 -想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。 +想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。 扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: -![](http://img.smyhvae.com/2016040102.jpg) +![](http://img.smyhvae.com/20200101.png) +