变量类型和计算
值类型与引用类型
常见的值类型
jslet a // undefined const s = 'abc' const n = 100 const b = true const y = Symbol('y')
常见的引用类型
jscosnt obj = {x: 100} cosnt arr = [1,2,3] const n = null //特殊的引用类型,指针指向空地址 // 函数 特殊引用类型,但不能用于存储数据,所以没有“拷贝、复制函数”这个说法 function fun(){}
typeof 运算符
识别所有值类型
识别函数
判断是否是引用类型(不可再细分)
jslet a // undefined const s = 'abc' const n = 100 const b = true const y = Symbol('y') console.log(typeof a); //undefined console.log(typeof s); //string console.log(typeof n); //number console.log(typeof b); //boolean console.log(typeof y); //symbol
js// 能判断函数 console.log(typeof console.log); // function console.log(typeof function(){}); //function // 能识别引用类型 console.log(typeof null); //object console.log(typeof ['a']); //object console.log(typeof {b: 'b'}); //object
深拷贝
- js
function deepClone(obj = {}){ if(typeof obj !== 'object' || obj == null) return obj // 初始化返回结果 let result obj instanceof Array ? result = [] : result = {} for(let key in obj){ // 保证当前属性来源于自身,不来自原型 if(obj.hasOwnProperty(key)){ result[key] = deepClone(obj[key]) } } return result }
类型判断
字符串拼接
- js
const a = 100 + 10 // 110 const b = 100 + '10' // '10010' const c = true + '10' // 'true10' const d = 100 + parseInt('10') // 110
==
- js
100 == '100' // true 0 == '' // true 0 == false // true false == '' // true null == undefined // true
- js
// 除了 == null以外,其他一律用=== const obj = {} if(obj.a == null){} // 相当于 if(obj.a === null || obj.a === undefined){}
if语句和逻辑运算
truly变量: !!a === true 的变量
falsely变量: !!a === false 的变量
- js
!!0 === false !!'' === false !!undefined === false !!null === false !!NaN === false !!false === false //除了以上情况,其他全是truly变量
if语句和逻辑运算里判断的就是是否为truly还是falsely变量,如if(1) if(null)等等
- js
10 && 0 //0 '' || 'abc' // 'abc'