一、值类型和引用类型的区别
值类型:Number、String、Bollean、Undefined
引用类型:Object、Array、function、Null(空指针)
值类型和引用类型的区别,我的理解是:一个保存在栈里,一个保存在堆里,值类型的值互相独立且不影响,而引用类型的值属于同一个内存地址,所以一个值改变了,另一个值也会随之改变。
下面看看例子吧~
// 值类型
let a =100
let b = a
a = 200
console.log(b); // 100
结论: a是a,b是b , a的改变,不会影响b,所以输出还是100。
// 引用类型
let A = { age:20 }
let B = A
B.age = 24
console.log(A.age) // 24
结论:一旦赋值了,B改变了,A也会随之改变,如果想要单独改变A的值,可以对其进行深拷贝。
下面来小试牛刀吧 这是常见面试题之一
const obj1 = { a:100 , b: 200}
const obj2 = obj1
let x1 = obj1.b
obj2.a = 103
x1 = 500
console.log(obj1.a); // 103
二、类型判断
1、typeof能判断哪种类型
(1) 能判断是否为值类型 (undefined string number boolean symbol)
(2) 能判断是否为引用类型(Object Array), 不可在细分
(3) 能判断是否为函数 (Function)
2.instanceof
原理:用于判断该对象是否存在于这个原型链上。能较为准确的判断出对象类型,但无法判断原始类型
注:当需要检测数据类型时,值类型用的是typeof,引用类型用的是instanceof来检测。
三、逻辑运算-变量计算
(1)字符串拼接
const a = 100 + 10 // 110
const b = 100 + '10' // '10010'
const c = true + '10' // 'true10'
(2) == 运算符
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 ){} 只是简写形式
那问题来了~ 我们应该何时使用双等(==)和全等(===)呢?
答案是:除了null 或 undefined 以外其他一律全等,==并不严谨
== 先尝试为不同类型的值进行转换,然后再比较值是否相等。
===当两边类型相同时,直接对比值,否则返回false
(3)truly变量和falsely变量
概念:经过两次非运算为true的为truly变量,反之则为falsely
◆truly 变量: !!a === true的变量
◆falsely 变量: !!a === false的变量
// 以下是falsely 变量。除此之外都是truly 变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false
注 : 自己学习整理,如果有不对的地方,还请多多指教,谢谢大家 ~!