Typeof
变量类型和计算
-
题目:
-typeof 能判断哪些类型
-何时使用=== 和==
-值类型和引用类型的区别
-手写深拷贝
知识点:
- 值类型和引用类型
let a = 100
let b = a
a = 200
console.log(b)
//引用类型
let a = {age:20}
let b = a
b.age =21
console.log(a.age)
对于对象,是a指向了内存地址1, 内存地址1是{age:20},接下来也是给b指向了内存地址1,所以当b.age更改为21的时候,a.age也会更改
常见值类型
let a // undefined;
const s = 'abc'
const n = 100
const b = true
const s = Symbol('s')
常见引用类型
const obj ={x :100}
const arr =['a','b','c']
const n = null //特殊引用类型,指针指向为空地址
// 特殊引用类型,但是不用于存储数据,所以没有‘拷贝复制函数’这一说
Typeof 运算符
识别所有值类型
识别函数
判断是否是引用类型(不可以再细分)
//判断所有值类型
let a; typeof a //'undefined'
const str = 'abc' typeof str //'string'
const n = 100; typeof n // 'number'
const b = true typeof b //'boolean'
const s =Symbol('s'); typeof s //'Symbol'
//判断函数
typeof console.log //'function'
typeof function (){} // 'function'
//能识别引用类型(不能再继续识别)
typeof null //'object'
typeof ['a','b'] //'object'
typeof {x : 100} //'object'
深拷贝,考点:递归
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Contect-Type" charset="utf-8">
<title>deepclone</title>
</head>
<body>
</body>
<p>deepclone</p>
<script>
const obj1={
age:20,
name:'James',
address:{
city:'Chengdu',
street:'Zhonghe'
},
arr :['a','b','c','d']
}
const obj2 =deepClone(obj1)
obj2.address.city ='shanghai';
console.log(obj1.address.city);
console.log('deepClone');
function deepClone(obj={}){
if(typeof obj !== 'object'|| obj == null){
// obj is null, just return
return obj
}
//初始化返回结果
let result
if(obj instanceof Array){
result =[]
}else {
result ={}
}
for(let key in obj){
if(obj.hasOwnProperty(key)){
//保证Key不是原型的属性,递归
result[key] =deepClone(obj[key])
}
}
return result
}
</script>
</html>
所谓深拷贝就是拷贝的对象的具体内容,其内容地址是自助分配的, 拷贝结束之后,内存中的值是相同的,但是内存地址是不一样的,所以两个对象之间相互不影响,也不干涉
- 字符串拼接
- ‘==’
- if语句和逻辑运算
字符串拼接 +
const a =100 +10 //110
const b =100+'10' //'10010'
const c =true +'10' // '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语句和逻辑运算符
truly变量 !!a === true 的变量
falsely变量 !!a === false 的变量
//以下是falsely变量,初次之外都是truly变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false
if语句里
//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
console.log(''||'abc') //'abc'
console.log(!windows.abc) //true