最近在准备面试的事情,正好在通过视频学习,将视频中的一些知识点整理一下,写出来做个备忘录(虽然我自己还手动写了一份纸质笔记),(/ω\)
知识点一、变量类型和计算
变量类型
值类型 和 引用类型
值类型:特点是每个变量都会存储各自的值,不会相互影响。
var a =100;
var b = a;
a = 200;
console.log(b); // 100
这里用的是Number
类型,字符串类型和布尔类型也一样。
引用类型:特点是不同变量指针指向同一个对象,可以无限地扩展属性,比如这里是age
,还可以加name
,加sex
等等(引用类型包括数组、对象、函数)
区别:
在值变量中,变量a
、b
各自分开占不同的内存,互不影响。
引用变量中,变量a
、b
都指向同一个对象,改变b
变量的值,会使得b
变量指向的对象改变,因此a变量也同时发生变化。
为什么在引用变量中,var b = a
; 不是将对象copy
一份给b
呢?因为引用类型是可以无限扩展属性的,如果a
自己一份, 再copy
给b
一份,当属性很多的时候,那么这个内存占用就很大了,而引用类型是为了让类型共同空间,指向同一个,这样内存只占用一处。
typeof 运算符
一共六种类型,但是typeof
只能区分值类型的详细类型,无法区分引用类型的详细类型,但可以区分出函数。
因为数组就没认出来啊。
变量计算-强制类型转换
1.字符串拼接
2.==运算符
第一个是将100转换成字符串
'100'
进行比较;第二个是把数字0转换成
false
,空字符也转换成false
,两者比较相等,所以结果为true
;第三个是将
null
和undefined
都转换成false
,再比较相同,所以结果为true
。
3.if语句
这里面后两种情况都发生了强制类型转换。
b=100
转换成了true
,执行了d重新赋值的操作,所以d为30
;
c=''
转换成了false
,无法进入if
语句,所以不执行里面的操作,d还是之前的30
。
4.逻辑运算符