网页制作与网站建设服务器,安徽网站建站系统哪家好,厚街东莞网站推广,wordpress迁移discuz目录 1、var、let、const的区别2、作用域考题3、合并两个对象4、箭头函数和普通函数的区别5、Promise有几种状态6、find和filter的区别7、some和every的区别 1、var、let、const的区别
区别一#xff1a; var有变量提升#xff0c;而let和const没有 scriptconsole.l… 目录 1、var、let、const的区别2、作用域考题3、合并两个对象4、箭头函数和普通函数的区别5、Promise有几种状态6、find和filter的区别7、some和every的区别 1、var、let、const的区别
区别一 var有变量提升而let和const没有 scriptconsole.log(str); //undefinedvar str 你好;/scriptscriptconsole.log(str); //let str 你好;/scriptscriptconsole.log(str); //const str 你好;/script区别二 var可以多次声明一个变量 let和const不能多次声明一个变量 scriptvar str 你好;var str 我好var str 大家好console.log(str); //大家好/scriptscriptlet str 你好;let str 我好let str 大家好console.log(str); //大家好/scriptscriptconst str 你好;const str 我好const str 大家好console.log(str); //大家好/script区别三 var、let声明变量、 const声明常量 var和let声明的变量可以再次赋值但是const不可以再次赋值了。 scriptvar str1 你好;let str2 我好;const str3 大家好;str1 哈哈;str2 哈哈哈;str3 哈哈哈哈;console.log(str1); //哈哈console.log(str2); //哈哈哈console.log(str3); //报错/* */Uncaught TypeError: Assignment to constant variable./script区别四 var声明的变量没有块级作用域 let和const声明的变量有自身块级作用域 scriptif (true) {var str 哈哈哈;}console.log(str);//哈哈哈/scriptscriptif (true) {let str 哈哈哈;}console.log(str);// ReferenceError: str is not defined/scriptscriptif (true) {const str 哈哈哈;}console.log(str);// ReferenceError: str is not defined/script2、作用域考题
考题一let和const没有变量提升性 scriptconsole.log(str); //undefinedvar str 你好;console.log(num); //报错let num 10;/script考题二 scriptfunction demo() {var n 2;if (true) {var n 1;}console.log(n); //1}demo();/scriptscriptfunction demo() {let n 2;if (true) {let n 1;}console.log(n); //2}demo();
/script考题三可以修改引用对象里面的值不能直接修改本身 scriptconst obj {a: 1,};obj.a 11111;console.log(obj);const arr [a, b, c];arr[0] aaaaa;console.log(arr);/scriptscriptconst obj {a: 1,};obj {a: 2,};console.log(obj);const arr [a, b, c];arr [hh];console.log(arr);/script直接报错。
3、合并两个对象
方式一Object.assign scriptlet a {a: 1,b: 2,};let b {a: 4,b: 5,c: 6,};const obj1 Object.assign(a,b);console.log(obj1);/script如果有相同的属性值后者覆盖前者。
方式二…扩展运算符
scriptlet a {a: 1,b: 2,};let b {a: 4,b: 5,c: 6,};const obj1 {...a,...b};console.log(obj1);/script方式三自己封装方法 scriptlet a {a: 1,b: 2,};let b {a: 4,b: 5,c: 6,};function merge(target, source) {for(let key in source) {target[key] source[key];}return target;}console.log(merge(a, b));/script4、箭头函数和普通函数的区别
1、this指向问题 箭头函数的this指向在定义的时候就决定了不能通过call、apply、bind改变 箭头函数的this指向定义的时候指向外层第一个普通函数如果为最顶层则指向window。 scriptlet obj {a: function () {console.log(this);},b:(){console.log(this);}};obj.a();obj.b();/script使用call改变this指向无效果. apply和bind同样。 scriptlet obj {a: function () {console.log(this);},b:(){console.log(this);}};obj.a();obj.b.call(obj);/script2、箭头函数不能new不能实例化成构造函数
scriptlet obj {a: function () {console.log(this);},b:(){console.log(this);}};let objA new obj.a();let objB new obj.b();/script3、箭头函数没有prototype原型
scriptlet obj {a: function () {console.log(this);},b:(){console.log(this);}};console.log(obj.a.prototype)console.log(obj.b.prototype)
/script4、箭头函数没有arguments scriptlet ff function () {console.log(arguments);};let fn () {console.log(arguments);};ff();fn();/scriptscriptlet ff function () {return fn () {console.log(arguments);};};ff()();/script如果箭头函数的外层第一个普通函数有arguments则改箭头函数的arguments为父级作用域的arguments。
我们可以通过Rest剩余运算符解决箭头函数没有arguments的问题。
scriptlet ff function() {console.log(arguments);} let fn (...res) {console.log(res);};ff(1)fn(1)/script5、Promise有几种状态
使用promise的时候给它一个承诺我们可以将他划分为三个阶段
pending(待定)执行了executor状态还在等待中没有被兑现也没有被拒绝fulfilled(已兑现)执行了resolve函数则代表了已兑现状态rejected(已拒绝)执行了reject函数则代表了已拒绝状态
简单理解
你承诺自己明天开始好好学习还未到明天此时为待定状态时光飞逝到了第二天你去图书馆好好学习了已兑现状态时光飞逝到了第二天你因为某些事情而无法去图书馆学习已拒绝状态
状态只要从待定状态变为其他状态后则状态不能再改变。
比如从pengding状态变为fulfilled状态后则不能在从fulfilled状态变为rejected状态。同样从pengding状态变为rejected状态后则不能在从rejected状态变为fulfilled状态。
举个栗子 const p new Promise((resolve,reject){setTimeout((){resolve(成功了)reject(失败了)},1000)})p.then(resolveconsole.log(resolve)).catch(rejectconsole.log(reject))//成功了当我调用resolve之后在调用reject是无效的因为状态已经发生改变并且是不可逆的。 6、find和filter的区别
区别一返回的内容不同 filter 返回是新数组 find 返回具体的内容 区别二 find 匹配到第一个即返回 filter 返回整体每一个匹配到的都返回 scriptlet arr [1, 2, 3, 4, 5];let newArr1 arr.find((item) {return item 2;});let newArr2 arr.filter((item) {return item 2;});console.log(newArr1);console.log(newArr2);console.log(arr);//都不改变原数组/script7、some和every的区别 some 》 如果有一项匹配则返回true every 》 全部匹配才会返回true scriptlet arr [1, 2, 3, 4, 5];let newArr1 arr.some((item) {return item 2;});let newArr2 arr.every((item) {return item 2;});console.log(newArr1);console.log(newArr2);/scriptscriptlet arr [1, 2, 3, 4, 5];let newArr1 arr.some((item) {return item 0;});let newArr2 arr.every((item) {return item 0;});console.log(newArr1);console.log(newArr2);/script