-
==和===的区别
两种符号的定义:
"==" 叫做相等运算符; "===" 叫做严格相等运算符(全等运算符)
它们之间的区别:
"==" 允许隐式类型转换,只判断等号两边的值是否相等,而不判断类型是否相同。值相同则返回 true ;
"===" 不允许隐式类型转换,既要判断值是否相等,也要判断类型是否相同,即全等才能返回 true ;
“==”运算符认为null和undefined是相等的;
“===”运算符认为null和undefined是不相等的。
-
判断布尔值:
-
0 f
-
‘0’ t
-
Undefined f
-
Null f
-
以下6个值会被转化为false,其他都视为true
- null
- undefined
- 0
- -0
- NaN
- “” 或 ‘’(空字符串)
js 基本数据类型:String Number Boolean Null Underfined
引用数据类型:Object function array
-
Js任务队列
同步代码放到执行栈中执行,异步代码会先存放到任务队列中,执行栈代码先执行,异步代码在执行栈执行完后再执行。任务队列优先级高于消息队列
宏任务和微任务都有什么
宏任务(macrotask):
异步Ajax请求
setTimeout 、setInterval
文件操作
微任务(microtask):
Promise.then、Promise.catch和Promise.finally
process.nextTick
-
'the-first-index'转成小驼峰
let reg=/-(\w)/g;
let str='the-first-index';
let str1=str.replace(reg,($,$1)=>{
return $1.toUpperCase();
});
console.log(str1);
-
数组方法(增删改查、迭代)
2.2.1 增
push——尾增(返回新数组长度)
unshift——首增(返回新数组长度)
splice(返回空数组)
concat(用于合并两个或多个数组,返回新构建的数组,不影响原数组)
// 增-splice(开始位置, 要增加的元素数量, 要插入的元素) 返回空数组
let colors = ["red", "green", "blue"];
let removed = colors.splice(1, 0, "yellow", "orange")
console.log(colors) // [ 'red', 'yellow', 'orange', 'green', 'blue' ]
console.log(removed) // []
// 增-concat 返回新构建的数组
let colors1 = ['red', 'green', 'blue'];
let colors2 = colors1.concat('yellow', ['black', 'brown']);
console.log(colors1); // [ 'red', 'green', 'blue' ]
console.log(colors2); // [ 'red', 'green', 'blue', 'yellow', 'black', 'brown' ]
2.2.2 删
pop——尾删(返回被删除项)
shift——首删(返回被删除项)
splice(返回被删除元素的数组)
slice(返回新切片构建的数组,但不影响原数组)
// 删-splice(开始位置,要删除元素的数量) 返回删除元素的数组
let colors = ["red", "green", "blue"];
let removed = colors.splice(0,1); // 删除第一项
console.log(colors); // [ 'green', 'blue' ]
console.log(removed); // [ 'red' ]
// 删-slice(新构建数组的开始元素位置, 新构建数组的结束元素位置边界) 不包括结束元素
let colors1 = ["red", "green", "blue", "yellow", "purple"];
let colors2 = colors1.slice(1);
let colors3 = colors1.slice(1, 4);
console.log(colors1); // ['red', 'green', 'blue', 'yellow', 'purple']
console.log(colors2); // ['green', 'blue', 'yellow', 'purple']
console.log(colors3); // ['green', 'blue', 'yellow' ]
2.2.3 改
改:splice(删除部分元素,同时插入元素,影响原数组)
// 改-splice(开始位置, 要删除的元素数量, 要插入的元素) 返回删除元素的数组
let colors = ['red', 'green', 'blue'];
let removed = colors.splice(1, 1, 'purple'); // 删除一个元素,插入一个元素
console.log(colors); // [ 'red', 'purple', 'blue' ]
console.log(removed); // [ 'green' ],只有一个元素的数组
2.2.4 查
indexOf
includes
find(传入逻辑函数,返回使得逻辑函数为真的第一个元素)
filter(传入逻辑函数,返回所有使得逻辑函数为真的数组)
let numbers = [1, 2, 3, 4, 5, 4];
console.log(numbers.indexOf(4)); // 3
console.log(numbers.includes(4)); // true
console.log(numbers.find((d, index) => d >= 5)); //5
console.log(numbers.filter((d, index) => d >= 5)); //[5];
-
for in和for of
for...in 循环只遍历可枚举属性(包括它的原型链上的可枚举属性)。像 Array和Object使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性,例如 String 的 indexOf() 方法或 Object的toString()方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。
for...of语句在可迭代对象(包括Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
判断数据类型的方式
1.typeof
typeof 返回值 “object” 、“number”、“boolean”、“undefined”、“function” 、“string”、“function”、'symbol"
typeof 返回的值都是字符串类型
2.instanceof
instanceof 是用来 判断数据是否是某个对象的实例,返回一个布尔值
3.constructor
使用 constructor 可以查看目标构造函数,也可以进行数据类型判断。但是不能判断 null 和 undefined,因为这两个特殊类型没有其对应的包装对象。constructor和instanceof 类似,constructor 返回结果的是自己的构造函数,而 instructor 则是自己与构造函数比较返回布尔值
4.Object.prototype.toString
在判断数据类型时,我们称 Object.prototype.toString 为 “万能方法” “终极方法”,工作中也是比较常用而且准确
-
把一个对象的属性变成不可改变的
数据描述符{
value:"",
configurable:false不能删除与重新定义,
writeable:true允许修改属性
enumerable:true允许变量循环
}
-
组件间通信
1.父组件给子组件传值
1.将传递的数据写入子组件
2.在子组件内使用props接收数据
2.子组件给父组件传值
1.在子组件内发射自定义事件 $emit(自定义事件名称,传递的数据)
2.在子组件标签上使用自定义事件来接受 @自定义事件='handler'
handler(a){}
3.兄弟组件传值
法1:
1.定义一个事件总线 new Vue();
2.引入事件总线 使用事件总线Bus.$emit(事件名称,发送的数据)
3.引入事件总线 使用事件总线Bus.$on(事件名称,(a)=>{
a--->数据
})
法2: vuex ---传值
4.祖先/子孙组件
1.使用provide(){
return {
传递的数据
"属性名":属性值/this.msg
}
}
2.inject注入传递的数据
inject:['属性',"属性"]
-
Vuex的实现
Vuex 是一个专为 Vue.js 应用程序开发的状态管理插件。(公共数据库)
当项目遇到以下两种场景时
1. 多个组件依赖于同一状态时。
2. 来自不同组件的行为需要变更同一状态。
解决的问题:多个视图依赖同一个状态,来自不同视图的行为需要变更同一状态,适用于中大型的单页面应用。
v-if v-show 区别
v-if是一个惰性的 只有满足条件的情况下 才会去加载dom节点 不满足条件 直接不渲染dom元素
v-show 满足条件 显示元素 不满足条件 隐藏元素 会去加载dom元素 不满足条件 调用display:none
使用场景:v-if 较少的dom开销
v-show 频繁的切换css样式
v-for中key的作用
key的作用: 因为vue会高效复用组件 很多时候我们不希望这样去做 所以会给节点添加一个唯一值 key去标识当前组件不被复用
计算属性computed和methods的区别
1,计算属性computed有依赖缓存 如果值没有发生变化 不会重新调用计算属性
methods没有依赖缓存 每一次调用都会重新执行/渲染
2,可以在methods里发送异步请求,可以封装函数
计算属性computed 不处理异步请求
3,computved 不会存在vue变量中,会新建一个属性并返回(缺点)
4,计算某一属性,只要其中一个变量发生变化,计算属性就可以监听到并处理后返回
watch和computed的区别
1,watch 监听属性或者监听vue变量的变化
特点:无缓存性,只有值发生变化的时候才可以监听到
执行开销较大的异步操作