js基础复习1
一、typeof 能判断那些类型
1.识别所有值类型
2.识别函数
3.判断是否是引用类型
二、何时使用===何时使用==
==会发生隐式转换,除了==null之外,其他一律用===
三、值类型和引用类型的区别
堆栈模型的不同,引用类型指向内存地址
深拷贝:
/*
深拷贝
*/
const obj1={
age:20,
name:'xxx',
address:{
city:"beijing"
},
arr:['a','b','c']
}
const obj2=deepClone(obj1);
obj2.address.city='shanghai'
/**
* @param {object} obj 要拷贝的对象
* 步骤:
* 1.判断值类型和引用类型
* 2.注意判断数组还是对象
* 3.递归(核心)
*/
function deepClone(obj={}){
if(typeof obj !=='object' || obj==null){
// obj是null,或者不是对象或者数组,直接返回
return obj
}
// 定义返回结果:
let result
// 判断是数组还是对象:
if(obj instanceof Array){
result=[]
}else{
result={}
}
// 无论对象和数组都可以用for in 遍历
for (let k in obj){
// 保证key不是原型上的属性:
if(obj.hasOwnProperty(k)){
// 递归:
result[k]=deepClone(obj[k])
}
}
// 返回结果:
return result
}
// 流程:
// let result ={},先传入key,key是age,然后执行deepClone,当20传递过去以后因为不是obj,所以直接返回本身20,
// 同理 name,当进行到address的时候因为后面是一个对象,所以会再进入递归
字符串和运算符
// 字符串拼接
const a=100+10;//110
const b=100 + '10' // '10010'
const c=true +'100' //'true10'
// ==运算符
100=='100' //true
0=='' //true
0==false //true
false =='' //true
null==undefined //true
/*规律:除了==null之外,其他一律用 ===,例如:*/
const obj={x:100}
if(obj.a==null){
}
//相当于
if(obj.a===null || obj.a===undefined){}
//if语句和逻辑运算
//truely变量(真的变量): !!a===true的变量
//falsely变量(假的变量): !!a===false的变量
//const n =100; => !n => false => !n =true ---经过两步非运算出现一个布尔值
//以下是falsely变量.除此之外都是truly变量
!!0 === false
!!NaN===false
!!''===false
!!null===false
!!undefined===false
!!false===false
// if语句中判断的就是trule变量和falsely变量
// truly变量:
const a=true
if(a){
//...
}
const b=100
if(b){
//....
}
//falsely变量
const c=''
if(c){
// ...
}
const d=null;
if(d) {
// ...
}
let e
if(e){
//...
}
// 逻辑判断
console.log(10 && 0) //0 因为10是truely变量,返回第二个值
console.log(0 && 10) //因为0是falsely变量,在与判断中第一个为false直接返回 0
console.log('' || 'abc') //'abc'
console.log(!window.abc) //true

浙公网安备 33010602011771号