JS基础之变量类型和计算

165 阅读2分钟

一、值类型和引用类型的区别

值类型:Number、String、Bollean、Undefined

引用类型:Object、Array、function、Null(空指针)

值类型和引用类型的区别,我的理解是:一个保存在栈里,一个保存在堆里,值类型的值互相独立且不影响,而引用类型的值属于同一个内存地址,所以一个值改变了,另一个值也会随之改变。   

栈和堆.jpg

下面看看例子吧~

// 值类型
 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

注 : 自己学习整理,如果有不对的地方,还请多多指教,谢谢大家 ~!