Skip to content

Commit e3fbb6b

Browse files
committed
第二节的内容
1 parent 96f1fdc commit e3fbb6b

5 files changed

Lines changed: 137 additions & 217 deletions

File tree

test-file.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212

1313

1414
<script>
15-
console.log("this is out info");
15+
/*console.log("this is out info");
1616
var oDiv=document.getElementById("div1");
1717
console.log(oDiv);
18-
oDiv.innerText="hello"
18+
oDiv.innerText="hello"*/
19+
20+
21+
1922
</script>
2023
</body>
2124
</html>

数据类型初识/Number类型.html

Lines changed: 0 additions & 40 deletions
This file was deleted.

数据类型初识/README.MD

Lines changed: 132 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ object本质是由一组无序的键值对组成的;
3030

3131
从技术的角度上讲,函数在ECMAScript中是对象,不是一种数据类型,属于对象,在就是里万物皆对象的,但是,函数也确实有一些特殊的属性,因此通过typeof操作符来区分也是有必要的;
3232

33-
typeof 运算符总是会返回一个字符串
33+
typeof 的返回值是一个字符串类型的数据
3434

3535
typeof检测任何数据,返回的都是一个字符串,两次和两次以上的连续typeof结果肯定都是string;
3636

@@ -43,6 +43,10 @@ typeof检测任何数据,返回的都是一个字符串,两次和两次以
4343
console.log(typeof typeof null);
4444
console.log(typeof typeof function(){});
4545

46+
**变量和数据之间的关系和区别**
47+
48+
变量是数据的代言人,可以更方便快捷的操作数据;
49+
4650
**[↑ 返回目录](#zero)**
4751

4852
<a name="one"><a/>
@@ -137,7 +141,8 @@ length计算包括空格
137141
var evalComputed=eval(evalVal);
138142
console.log(evalComputed,typeof evalComputed);//26 "number"
139143

140-
##### 如果把某个值转化为字符串,可以有一个快捷的方式,就是把它与一个字符串""相加就可以了;
144+
##### 如果把某个数据转化为字符串,可以有一个快捷的方式,就是把它与一个字符串""相加就可以了;
145+
141146

142147
//+""用来转换字符串
143148
var numVal=2;
@@ -154,6 +159,17 @@ length计算包括空格
154159
console.log(nullPlus,typeof nullPlus);
155160
console.log(undefinedPlus,typeof undefinedPlus);
156161

162+
某个数据并不仅限于Number类型;数组也可以的;
163+
164+
console.log([1,2,3,4]+"")
165+
166+
167+
再看一组的加法(将字符串转为数字,注意浮点数的运算精度);
168+
169+
console.log("1.1" + 1.1);
170+
console.log(+"1.1" + 1.1);
171+
console.log((+"1.1") + (+1.1));//2.2 注:加入括号为清楚起见,不是必需的。
172+
157173

158174
备注:先简单的总结,后面有专门深入总结;
159175

@@ -164,6 +180,8 @@ length计算包括空格
164180

165181
## 知识点二、number;
166182

183+
包含:正数、负数、零、小数、以及特殊的NaN;
184+
167185
- 进制
168186
- 十进制(最常用)
169187
- 八进制(仅了解即可)
@@ -185,7 +203,7 @@ length计算包括空格
185203
- 以e为底*10的正负N次幂
186204
- 最高精度:17位小数
187205
- 缺点
188-
- 存在舍入误差(浮点数之间的运算也是非常不准确的,需要转成整数,然后再运算,运算后再转回对应的小数)
206+
- 存在舍入误差(**浮点数之间的运算也是非常不准确的,需要转成整数,然后再运算,运算后再转回对应的小数**)
189207
- 无法测试特定浮点数值,不要直接对浮点数进行运算;
190208
- 在做有浮点数运算的情况下,先转成整数,然后得到结果后再转成小数;
191209

@@ -212,8 +230,8 @@ length计算包括空格
212230
- 合法范围true
213231
- NaN
214232
- 含义
215-
- Not a Number
216-
- 非数值,,但是属于数值类型
233+
- Not a Number
234+
- 非数值,不是一个数值,但是NaN属于数值类型
217235

218236
console.log(10-"zhuanbang");//NaN Not a Number
219237
var NaNVal=10-"zhuanbang";
@@ -223,7 +241,8 @@ length计算包括空格
223241
- 特点
224242
- 任何涉及NaN的操作都将返回NaN
225243
- NaN与人和数值都不相等包括其自身
226-
244+
245+
console.log(NaN==NaN)
227246

228247
- 检测 isNaN
229248
- 可以转换为数值,为false
@@ -232,14 +251,16 @@ length计算包括空格
232251
//isNaN
233252
var age=25;
234253
var ageError=25-"男";
235-
console.log(isNaN(age));//false age这个值不是一个数,对不对? -> 不对 ->false
236-
console.log(isNaN(ageError));//true ageError这个值不是一个数,对不对? -> 对 ->true
254+
console.log(isNaN(age));//false age这个值不是一个数,对吗? -> 不对 ->false
255+
console.log(isNaN(ageError));//true ageError这个值不是一个数,对吗? -> 对 ->true
237256

238257

239-
- 数值转换的三种方法;
258+
- 数值转换的三种方法(五种方式)
240259
- Number() 最霸道的转换方法,只要不是纯数值类型,全部不能成功转换;
241260
- parseInt() 是Number的升级版本;有字符串出现也可能转换为数值;从前往后开始转,只要有一位可以转为数字都可以成功转换为数字;123sad可以转为123;(备注:会忽略浮点号;遇到第一个非数值的符号后直接退出转换,其中"."也是不合法的数值符号)
242261
- parseFloat() 属于parseInt的升级版本;可以转换为浮点数123.12dw可以转换为123.12;
262+
- -0 比如"5"-0; 这个方法也属于Number()的;但是它属于隐式调用Number方法;
263+
- +"52" 这种也可以转化为数字;
243264

244265
详细的解读
245266

@@ -334,6 +355,49 @@ length计算包括空格
334355

335356
为false值的是,false本身、空字符串、0、NaN、null、undefined;这些值要记住,很重要;
336357

358+
359+
**!和!!**
360+
361+
!是取反的意思;先将其它的数据类型转换为布尔类型;然后在取反;
362+
363+
!!是将其他的数据类型转换为不二类型,相当于Boolean;
364+
365+
**自身做布尔运算时候的转换**
366+
367+
类型 | 规律 | 示例
368+
--- | ---| ---
369+
Object | 都是true | Alert(!![])
370+
Number | 只是0和NaN是false | Alert(!!0)
371+
String | 只有空字符串是false(不是空格字符串) | Alser(!!””)
372+
Function | 都是true |
373+
null,undefined | 都是false |
374+
375+
**总结:0、NaN、””、null、undefined、false本身;只有这六个是false类型的;其它都是true;**
376+
377+
378+
**数据类型和逻辑运算规律表**
379+
380+
【我手动画的转换图】
381+
![](https://raw.githubusercontent.com/Broszhu/zhuanbang-javascript-notes/master/img/path1/typeChange.jpg)
382+
383+
详细解说
384+
385+
386+
类型A | 类型B | 比较时候的运算原理 | 说明
387+
----|------|----
388+
对象 | 对象 | 比较是不是同一个内存地址,肯定不相等 | []==[] false
389+
对象 | 字符串 | 对象先转化为字符串,然后做比较 |
390+
对象 | 布尔类型 | 两边都要先转为数字(false是0,true是1);对象类型先转隐式调用toString方法,然后再Number() | []==false,[]==0,[1]==1,[1]==true,[2]==true
391+
对象 | 数字 | 对象要转为数字,再进行比较(对象先隐式调用toString方法转换为字符串,然后再把这个字符串转化为数字,相当于字符串放到number这个方法中) |
392+
数字 | 布尔 | 是进行数字的比较,布尔转为数字 |
393+
数字 | 字符串 | 两边都要转换为数字再进行比较 |
394+
布尔 | 字符串 | 两边都要转为数字再进行比较 |
395+
null | undefined | True;因为undefined派生自nul,l |
396+
null/undefined | 其它所有类型 | Null和undefined和其他类型比较都是false;(这两个方法没有toString方法) | null==false,null==0,null==””
397+
398+
399+
400+
337401
**[↑ 返回目录](#zero)**
338402

339403
<a name="four"><a/>
@@ -342,14 +406,33 @@ length计算包括空格
342406

343407
undefined类型只有一个值,就是undefined;null类型也只有一个值就是null;它们的名称既是类型也是值;
344408

409+
null是空值,是一个空指针,一般表示一个变量定义了但是没有值(值为空);undefined是未定义;
410+
411+
console.log(xxx);// xxx is not defined
412+
413+
和下面
414+
415+
var xxx;
416+
console.log(xxx)
417+
418+
两者是不一样的;
419+
420+
没有发现对象,也是undefined;
421+
422+
var msg={
423+
msg1:1,
424+
mag2:2
425+
};
426+
console.log(msg.msg1);//1
427+
console.log(msg.msg3);//undefined
428+
345429
- null(空值,曾经赋过值,但是目前没有值)
346430
- 逻辑上null表示一个空对象的指针
347431
- 使用typeof检测的时候会返回object;(object原型的终点也是null)
348432
- undefined(没有值,指从没有赋过值)
349-
- 使用var声明变量但没有初始化
433+
- 使用var声明变量但没有初始化/赋值的
350434
- 区分空对象指针与尚未定义的变量
351-
- 对未初始化的变量以及未声明的变量使用
352-
- typeof运算符均会返回undefined;
435+
- 对未初始化的变量以及未声明的变量使用typeof运算符均会返回undefined;
353436

354437
在非严格模式和严格模式下,我们可以声明一个undefined的局部变量,因为undefined是一个标识符,可以当作变量来使用和赋值;但却不能声明一个null的局部变量,因为null是一个特殊关键字,并不是一个标识符;注意这是为了深入理解null和undefined的背后原理而挖出来的不同,请不要真的声明一个undefined的变量(这是一个非常不好的习惯,严格点的压缩工具,压缩时都不会给你通过的,直接给你抛Error;)
355438

@@ -361,7 +444,7 @@ undefined类型只有一个值,就是undefined;null类型也只有一个值
361444
- 没有必要将变量显示声明undefined;
362445
- 声明非空对象对应将其赋值为null;比如做定时器的时候用timer=null来重置变量;
363446

364-
> Undefined只有一个值,就是特殊的undefine;(大写的Undefined是代表Undefined类的意思,就好比人类和人的关系;)
447+
> Undefined类只有一个值,就是特殊的undefine;(大写的Undefined是代表Undefined类的意思,就好比人类和人的关系;)
365448
366449
var test1;
367450
var test2=undefined;
@@ -375,6 +458,34 @@ undefined类型只有一个值,就是undefined;null类型也只有一个值
375458
> Null是第二个只有一个值的数据类型,这个特殊的值是null,从逻辑上来看,null值表示一个空对象指针,而这也正是typeof操作符检测null时候,返回"object"的原因;
376459
只要意在保存对象的变量还没有真正保存对象,就应该明确的让变量赋值为null值;这不仅可以体现null作为空对象指针的惯例,而且也有助于进一步却分null和undefined;
377460

461+
462+
463+
<a name="six"><a/>
464+
## 六、null和undefined的区别和联系
465+
Undefined是javascript中的一大特点,是javascript独有的数据和数据类型(这个数据类型只有这一个值;就是undefined,它的类型也是undefined),既然它是javascript独有的一个数据类型,那它在javascript编程里必然有它的特点;所以本节也在重复说;
466+
467+
在javascript里,null和undefined都表示不存在的数据,并且undefined也是从null中继承而来的,那null是什么?undefined又是什么?他们两个都有什么共性和区别呢?看下面描述
468+
469+
- null和undefined都是表示没有的,不存在的值;他们两个在进行逻辑转换时候都是false;这两个值进行比较是true;
470+
- Null和undefined没有toString方法;所以null和undefined和人和数据比较都是false;
471+
- 因为undefined派生自null,所以undefined和null做数据类型比较的时候的true;
472+
- null表示空引用,它是object类型,undefined表示未定义,它是undefined类型;
473+
- null是object类型,但不是object的实例;用instanceof为false;
474+
- 如果一个变量的值是null,那么必须主动的给它赋值null;
475+
- 一个变量未定义,或者变量定义里未赋值;则是undefined;
476+
- 需要注意的是,一个变量如果没有定义,是不能直接在程序里使用的(就是不能直接读取,但可以赋值);比如说,本来没有定义一个叫a的变量;但是我去aconsole.log(a);在浏览器里这个语法会报错的;但是可以用typeof去运算;但是如果a定义了,但没有赋值;可以读,它的值就是undefined;表示这个变量没有被赋值;
477+
- 对于属性来说,如果原来没有这个属性,根本就不存在这个属性,那么它的值就是undefined;
478+
- 对象的属性不需要定义,如果不存在也可以直接去读,不会报错,而会给一个undefined的值;
479+
- 如果这个对象以后要用;但是现在还没有值,一般情况下,会给他一个null的值;(如果在处理数据的时候,临时创建了一个变量,逻辑运算后,这个变量没有用了,也推荐把这个对象置为null,比如做定时器的时候)
480+
- 在函数(方法)里,如果必须返回值;但是值又计算不出来,那就返回一个null;(这是规范,而不是语法规定,JS里遵循这个规范)
481+
- 比如网页中没有ID是div1的元素,则下面的这句脚本返回null;
482+
- Document.getElementById(“div1”)//返回null;
483+
- 但是没有返回值的函数,它的返回值都是undefined;
484+
485+
**白话文**
486+
- null: 你有一个种树的想法,圈一块地,说你要在这里种树;
487+
- undefined:你有一个种树的想法,圈一块地,说你要在这里种树;同时你还挖了一个坑准备种树(仅仅是挖坑,也还没有种树);
488+
378489
**[↑ 返回目录](#zero)**
379490

380491
<a name="five"><a/>
@@ -385,8 +496,8 @@ Object类型包括,数组、正则等等;
385496

386497
- 定义:一组数据或功能的集合
387498
- 声明
388-
- Var o=new Object()//Object后面的()可以省略,但不推荐
389-
- Var o={}
499+
- var o=new Object()//Object后面的()可以省略,但不推荐
500+
- var o={}
390501

391502
- 属性和方法
392503
- constructor:保存用于创建当前对象的函数,构造函数就是Object()
@@ -445,69 +556,12 @@ str.length就是字符串的长度;
445556

446557
js中规定一个对象的属性名是不可重复的(这句话一定要记住,处理很多事务的时候,经常会用到对象的属性来进行操作;)
447558

448-
**null和undefined**:null是空值,是一个空指针,一般表示一个变量定义了但是没有值(值为空);undefined是未定义;
449-
450-
- Null是object类型,但不是object的实例;用instanceof为false;
451-
- Null和undefined没有toString方法;所以null和undefined和人和数据比较都是false;
452-
- 因为undefined派生自null,所以undefined和null做数据类型比较的时候的true;
453-
454559
**typeof**:检测数据类型的运算符;返回的结果是一个字符串;里面包含了对应的数据类型;例如”object”在JS中typeof null的结果也是object;
455560

456561
**Instanceof**:检测某一个实例是否属于这个类;在类的继承中检测的不是很严禁;
457562

458563
**[↑ 返回目录](#zero)**
459564

460-
<a name="six"><a/>
461-
## 六、null和undefined的区别和联系
462-
Undefined是javascript中的一大特点,是javascript独有的数据和数据类型(这个数据类型只有这一个值;就是undefined,它的类型也是undefined),既然它是javascript独有的一个数据类型,那它在javascript编程里必然有它的特点;所以本节也在重复说;
463-
464-
在javascript里,null和undefined都表示不存在的数据,并且undefined也是从null中继承而来的,那null是什么?undefined又是什么?他们两个都有什么共性和区别呢?看下面描述
465-
466-
- null和undefined都是表示没有的,不存在的值;他们两个在进行逻辑转换时候都是false;这两个值进行比较是true;
467-
- null表示空引用,它的object类型,undefined表示未定义,它的undefined类型;
468-
- 如果一个变量的值是null,那么必须主动的给它赋值null;
469-
- 一个变量未定义,或者变量定义里未赋值;则是undefined;需要注意的是,一个变量如果没有定义,是不能直接在程序里使用的(就是不能直接读取,但可以赋值);比如说,本来没有定义一个叫a的变量;但是我去aconsole.log(a);在浏览器里这个语法会报错的;但是可以用typeof去运算;但是如果a定义了,但没有赋值;可以读,它的值就是undefined;表示这个变量没有被赋值;
470-
- 对于属性来说,如果原来没有这个属性,根本就不存在这个属性,那么它的值就是undefined;对象的属性不需要定义,如果不存在也可以直接去读,不会报错,而会给一个undefined的值;
471-
- 如果这个对象以后要用;但是现在还没有值,一般情况下,会给他一个null的值;(如果在处理数据的时候,临时创建了一个变量,逻辑运算后,这个变量没有用了,也推荐把这个对象置为null)
472-
- 在函数(方法)里,如果必须返回值;但是值又计算不出来,那就返回一个null;(这是规范,而不是语法规定,JS里遵循这个规范)比如网页中没有ID是div1的元素,则下面的这句脚本返回null;
473-
474-
Document.getElementById(“div1”)//返回null;
475-
476-
但是没有返回值的函数,它的返回值都是undefined;
477-
478-
**数据类型和逻辑运算规律表**
479-
480-
【我手动画的转换图】
481-
![](https://raw.githubusercontent.com/Broszhu/zhuanbang-javascript-notes/master/img/path1/typeChange.jpg)
482-
483-
详细解说
484-
485-
486-
类型A | 类型B | 比较时候的运算原理 | 说明
487-
----|------|----
488-
对象 | 对象 | 比较是不是同一个内存地址,肯定不相等 | []==[] false
489-
对象 | 字符串 | 对象先转化为字符串,然后做比较 |
490-
对象 | 布尔类型 | 两边都要先转为数字(false是0,true是1);对象类型先转隐式调用toString方法,然后再Number() | []==false,[]==0,[1]==1,[1]==true,[2]==true
491-
对象 | 数字 | 对象要转为数字,再进行比较(对象先隐式调用toString方法转换为字符串,然后再把这个字符串转化为数字,相当于字符串放到number这个方法中) |
492-
数字 | 布尔 | 是进行数字的比较,布尔转为数字 |
493-
数字 | 字符串 | 两边都要转换为数字再进行比较 |
494-
布尔 | 字符串 | 两边都要转为数字再进行比较 |
495-
null | undefined | True;因为undefined派生自nul,l |
496-
null/undefined | 其它所有类型 | Null和undefined和其他类型比较都是false;(这两个方法没有toString方法) | null==false,null==0,null==””
497-
498-
499-
**自身做布尔运算时候的转换**
500-
501-
类型 | 规律 | 示例
502-
--- | ---| ---
503-
Object | 都是true | Alert(!![])
504-
Number | 只是0和NaN是false | Alert(!!0)
505-
String | 只有空字符串是false(不是空格字符串) | Alser(!!””)
506-
Function | 都是true |
507-
null,undefined | 都是false |
508-
509-
**总结:0、NaN、””、null、undefined、false本身;只有这六个是false类型的;其它都是true;**
510-
511565

512566
# 七、Symbol 类型
513567

@@ -579,6 +633,7 @@ Symbol值不能与其他类型的值进行运算,会报错;但是可以显式
579633

580634
<a name="footer"><a/>
581635
## 练习题:
636+
- 如何让alert弹出框的信息换行
582637
- var str=true+11+null+9+indefined+”zhuanbang”+flase+null+9+[],str的值是多少?为什么?
583638
- 在js中,{}、[]分别代表什么意思?
584639
- NaN是什么意思?这个值有什么特点?
@@ -599,6 +654,9 @@ Symbol值不能与其他类型的值进行运算,会报错;但是可以显式
599654
- False==” ”
600655
- 0.1+0.2==0.3
601656
- “5”==5
602-
603-
- 如何让alert弹出框的信息换行
604657
- 有哪些值转换后是false
658+
- 下面分别输出什么?
659+
console.log("22"+11);
660+
console.log("22"-2+11);
661+
console.log("22"+11-2);
662+
console.log(+"22"+11);

0 commit comments

Comments
 (0)