@@ -270,7 +270,7 @@ console.log(c.red + " " + c[5]); // 5 red
270270- 宿主对象:宿主环境如果是浏览器,则宿主对象是指由浏览器定义的对象,包括window和document
271271
272272## Global
273- - 属性
273+ - 常量
274274
275275 Infinity
276276
@@ -434,11 +434,11 @@ console.log(c.red + " " + c[5]); // 5 red
434434> 对象存储始终使用哈希表存储,且需额外处理原型链查找,访问速度较慢
435435
436436## String
437- - 属性
437+ - 实例属性
438438
439439 length:字符串长度
440440
441- - 方法
441+ - 实例方法
442442
443443 1、获取
444444
@@ -498,24 +498,28 @@ console.log(c.red + " " + c[5]); // 5 red
498498 ```
499499
500500## Array
501- - 特点:
501+ - 特点
502502
503503 长度可变(根据元素操作而变化或修改length属性)
504504
505505 元素类型任意
506506
507507 元素密集且类型一致则使用连续缓冲区存储(V8还会根据元素类型再细分,如整数、浮点数、引用对象),适合查询;元素稀疏或类型不一致则使用哈希表存储,适合增删。使用哈希存储,查询元素时需要计算哈希值,处理冲突,效率比连续缓冲区慢。使用顺序存储,新增元素时会检查空间是否足够,不够则扩容,而使用哈希存储无需扩容,直接新增索引-值对
508508
509- - 创建
509+ - 创建方式
510510 ``` js
511- var arr= []; // 数组长度为0
512- var arr= [1 , 2 , 3 , 3 ]; // 数组长度为4,元素为1,2,2,3
513- var arr= new Array (); // 相当于var arr=[];
514- var arr= new Array (5 ); // 数组长度为5
515- var arr= new Array (5 ,6 ,7 ); // 数组长度为3,元素为5,6,7
511+ var arr = []; // 数组长度为0
512+ var arr = [1 , 2 , 3 , 3 ]; // 数组长度为4,元素为1,2,2,3
513+ var arr = new Array (); // 相当于var arr=[];
514+ var arr = new Array (5 ); // 数组长度为5
515+ var arr = new Array (5 ,6 ,7 ); // 数组长度为3,元素为5,6,7
516516 ```
517517
518- - 属性
518+ - 静态方法
519+
520+ Array.isArray(obj):判断对象是否是数组。若是则为true,否则为false
521+
522+ - 实例属性
519523
520524 length:数组长度,支持修改。默认数组长度 = max(initialLength, validValueMaxIndex + 1)
521525 ``` js
@@ -533,7 +537,7 @@ console.log(c.red + " " + c[5]); // 5 red
533537 console .log (arr2, arr2 .length ) // [ <100 empty items>, 1 ] 101
534538 ```
535539
536- - 方法
540+ - 实例方法
537541
538542 1、改变数组(排序、增删改)
539543
@@ -560,10 +564,6 @@ console.log(c.red + " " + c[5]); // 5 red
560564
561565 join(separator):把数组中的所有元素转换为一个字符串,需指定元素之间的分隔符
562566
563- 3、静态方法(判断是否为数组)
564-
565- Array.isArray(obj):判断对象是否是数组。若是则为true,否则为false
566-
567567- 其他
568568 ``` js
569569 // in判断数组元素在某个位置是否有值
@@ -574,27 +574,28 @@ console.log(c.red + " " + c[5]); // 5 red
574574
575575 // 类数组可通过call或apply调用数组原生方法
576576 console .log (Array .prototype .join .call ({0 : ' name' , 1 : ' age' , 2 : ' sex' , length: 3 }, ' *' ))
577-
578577 ```
579578
580579## Date
581580- 函数调用
582581
583- Date():返回日期时间字符串,相当于调用了toString()
582+ Date():返回日期时间字符串,相当于调用 ` new Date().toString() `
584583
585- - 构造函数
584+ - 创建方式
586585
587586 new Date()
588587
589588 new Date(时间戳)
590589
591- new Date(日期时间字符串),该时间字符串能被Date .parse识别
590+ new Date(日期时间字符串),该时间字符串要能被Date .parse识别
592591
593592 new Date(y, m[ , d] [ , h ] [ , m] [ , ms ] )
594593
595- - 方法
594+ - 静态方法
596595
597- Date.parse(datestr):解析日期时间字符串,返回毫秒数
596+ Date.parse(dateStr):解析日期时间字符串,返回毫秒数
597+
598+ - 实例方法
598599
599600 getDay():获取一周的某一天[ 0-6]
600601
@@ -603,16 +604,24 @@ console.log(c.red + " " + c[5]); // 5 red
603604 g[ s] etFullYear([ year] [ ,month ] [ ,day] ):获取或设置当前年份
604605
605606 g[ s] etMonth(month[ ,day] ):获取或设置当前月份
607+
608+ g[ s] etDate(day):获取或设置当前日期
606609
607- g[ s] etDate(day):获取或设置一个月中的某一天
610+ g[ s] etHours(hour):获取或设置当前小时
611+
612+ g[ s] etMinutes(minute):获取或设置当前分钟
613+
614+ g[ s] etSeconds(second):获取或设置当前秒
615+
616+ g[ s] etMilliseconds(millisecond):获取或设置当前毫秒
608617
609618 toLocaleString():将日期时间转化为本地格式化字符串
610619
611620 toLocaleDateString()
612621
613622 toLocaleTimeString()
614623
615- g[ s] etUTCXXX():除了参照本地客户端时间,也提供了参照UTC时间。获取或设置格林威治时间,XXX表示fullYear/month/date/hours/minutes/seconds/millseconds任意一个
624+ g[ s] etUTCXXX():除了参照本地客户端时间,也提供了参照UTC时间。获取或设置格林威治时间,XXX表示fullYear/month/date/day/ hours/minutes/seconds/milliseconds任意一个
616625
617626 toString()
618627
@@ -676,7 +685,7 @@ console.log(c.red + " " + c[5]); // 5 red
676685
677686 MIN_VALUE:最小数值
678687
679- - 方法
688+ - 实例方法
680689
681690 toExponential(digits):指定小数点后的数字位数,返回指数形式表示数字字符串
682691
@@ -729,7 +738,7 @@ console.log(regExp.lastIndex); //2
729738// 解决办法:每次调用前重新分配一个正则对象
730739```
731740
732- - JS中正则表达式书写方式
741+ - 正则表达式书写方式
733742
734743 JS风格:new RegExp(正则字符串, 修饰符);
735744
@@ -894,7 +903,10 @@ const chineseRegex = /^[\u4e00-\u9fa5]*$/;
894903- 函数调用作为表达式,如` var f = 函数名(); ` ,赋值函数结果,而` var f = 函数名; ` 是将函数引用赋值给f
895904
896905### 函数参数
897- 形参与实参个数可以不一致,但是顺序必须一致
906+ - 形参与实参个数可以不一致,但是顺序必须一致
907+ - arguments表示存储函数参数的类数组对象,是所有非箭头函数的局部变量
908+
909+ 所谓类数组对象,即只有length和callee(指向当前执行的函数)属性,以及键是从0开始的整数索引,并不具有数组其他属性和方法。无论是否在严格模式下,只要函数使用了剩余参数、默认参数或解构赋值当中的一种时,函数就不会改变arguments对象的行为,但若在非严格模式下函数没有使用剩余参数、默认参数或解构赋值时,修改arguments对象某个属性值,则会改变arguments对象的行为
898910
899911### 函数返回值
900912默认是undefined
@@ -905,13 +917,12 @@ const chineseRegex = /^[\u4e00-\u9fa5]*$/;
905917- 3.函数调用时没有指明this,一般默认是当前的宿主对象
906918
907919### 属性
908- - prototype:原型对象
920+ - name:函数名
909921- length:函数声明的参数个数
910- - arguments:存储函数参数的类数组对象。是所有非箭头函数的局部变量。所谓类数组对象,即只有length和callee(指向当前执行的函数)属性,以及键是从0开始的整数索引,并不具有数组其他属性和方法。无论是否在严格模式下,只要函数使用了剩余参数、默认参数或解构赋值当中的一种时,函数就不会改变arguments对象的行为,但若在非严格模式下函数没有使用剩余参数、默认参数或解构赋值时,修改arguments对象某个属性值,则会改变arguments对象的行为
911922
912923### 方法
913- - apply(context,argsArr):改变函数的this指向,传入上下文对象和参数数组,且立即执行
914- - call(context,...args):改变函数的this指向,传入上下文对象和不定参数,且立即执行
924+ - apply(context, argsArr):改变函数的this指向,传入上下文对象和参数数组,且立即执行
925+ - call(context, ...args):改变函数的this指向,传入上下文对象和不定参数,且立即执行
915926- bind(context):改变函数的this指向,传入上下文对象,不执行
916927
917928 ``` js
@@ -945,100 +956,6 @@ const chineseRegex = /^[\u4e00-\u9fa5]*$/;
945956 addOne (2 ); // 3
946957 ```
947958
948- ## 模板字符串
949- ### 概念
950- 允许嵌入表达式的字符串字面量。在ES6之后又叫模板字面量。
951-
952- ### 特点
953- - 使用反引号``
954- - 嵌入的表达式使用${}标识
955- - 识别换行
956- - 使用转义字符时前面加反斜杠\
957- - 允许模板字符串中的表达式嵌入另一个模板字符串,如` This is a ${isPen ? 'pen': ` pig,sorry,${friend},you should be harder!` } `
958-
959- ### 标签模板
960- - 概念:模板字符串前带有一个表达式,该表达式通常是一个函数
961- - 特点
962- - 标签函数是在模板字符串处理后被调用
963- - 函数首个参数是包含所有普通字符串的数组对象,并额外有一个属性raw,值是一个数组,用于获取原始字符串,即不对模板字符串使用转义,跟String.raw函数是一样的效果
964- - 函数剩余参数表示模板字符串中的出现的每一个表达式结果
965- - 函数返回值可以是一个字符串,一个函数,一个对象
966- - ES2016起,标签模板需遵守该转义规则:Unicode字符以"\u"开头,Unicode码位用"\u{}"表示,16进制以"\x"开头,8进制以"\" 和数字开头
967- ``` js
968- // unicode字符在模板字符串的表示
969- // `\u{55}`.length // 1
970- // (/./).test(`\u{55}`) // true
971- // `\u{2028}`.length // 1
972- // (/./).test(`\u{2028}`) // false,从2028开始占位为2
973- // `\u${55}`.length // Uncaught SyntaxError: Invalid Unicode escape sequence
974- ```
975- - 唯一一个内置的模板字符串标签函数` String.raw`
976-
977- 用于获取字符串的原始字面量值。可以保证如\u开头(表示unicode字符),\u{}(表示Unicode码位),\x开头(表示16 进制),\数字开头(表示8 进制)等不被转义
978- ` ` ` javascript
979- console.log(` aaaa\unicode` ) // Uncaught SyntaxError: Invalid Unicode escape sequence
980- console.log(String.raw` aaaa\unicode` ); // 'aaaa\\ unicode'
981- ` ` `
982-
983- - 示例
984- ` ` ` js
985- // 1 标签函数返回对象
986- function template1(strings) {
987- // 0: undefined
988- // length: 1
989- // raw: ['\\ unicode']
990- return {
991- "template": strings[0],
992- "normal": strings.row[0]
993- };
994- }
995- console.log(template1` \unicode` );// { template: undefined, normal: "\\ unicode" }
996-
997- // 2 标签函数返回字符串
998- function bar(arr1, arr2) {
999- console.log('params:', arr1, arr2)
1000- return arr1.join('')
1001- }
1002- console.log(bar` just${' 123' }javac` )
1003-
1004- // 3 标签函数返回字符串
1005- function foo(str) {
1006- return str[0].toUpperCase()
1007- }
1008- console.log(foo` justjavac` )
1009-
1010- // 4 标签函数返回字符串
1011- var name = "benben";
1012- var age = 18;
1013- function template2(strings,nameExp, ageExp) {
1014- var ageStr;
1015- if(ageExp > 100) {
1016- ageStr = "centenarian";
1017- } else {
1018- ageStr = "youngster";
1019- }
1020- return strings[0] + nameExp + strings[1] + ageStr;
1021- }
1022- console.log(template2` That ${name} is a ${age}` );
1023-
1024- // 5 标签函数返回函数
1025- function template3(strings,...keys){
1026- return function(...values) {
1027- var dict = values[values.length - 1] || {};
1028- var result = [strings[0]];
1029- keys.foreach((key, i) => {
1030- var val = Number.isInteger(key)? values[key] : dict[key];
1031- result.push(val, strings[i + 1]);
1032- })
1033- return result.join("");
1034- }
1035- }
1036- var t1 = template3` ${0 }${1 }${0 }! ` ;
1037- console.log(t1("Yes" ,"No")); // "YesNoYes!"
1038- var t2 = template3` ${0 } ${' foo' }! ` ;
1039- console.log(t2("Hello", { "foo": "World" })); // "Hello World!"
1040- ` ` `
1041-
1042959## 代码运行过程
1043960涵盖执行上下文、this指向、作用域链、闭包等内容
1044961
0 commit comments