@@ -30,7 +30,7 @@ object本质是由一组无序的键值对组成的;
3030
3131从技术的角度上讲,函数在ECMAScript中是对象,不是一种数据类型,属于对象,在就是里万物皆对象的,但是,函数也确实有一些特殊的属性,因此通过typeof操作符来区分也是有必要的;
3232
33- typeof 运算符总是会返回一个字符串 :
33+ typeof 的返回值是一个字符串类型的数据 :
3434
3535typeof检测任何数据,返回的都是一个字符串,两次和两次以上的连续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
343407undefined类型只有一个值,就是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
446557js中规定一个对象的属性名是不可重复的(这句话一定要记住,处理很多事务的时候,经常会用到对象的属性来进行操作;)
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