JavaScript红宝书01-语言基础(Language Basics)

37 阅读2分钟

1、定义变量

var定义

var的作用域:方法里面定义不能在方法外面访问

注意:var在方法内部定义局部变量,变量会被提升到方法的顶层,会出现未赋值也可以使用,或者被多次覆盖的问题

let定义

let 和 var很接近,最主要的不同就是作用域,let是块级作用域(block) 而 var是函数级作用域(function) let 的作用域不会向块外延伸。

JavaScript是弱数据类型

临时死区(Temporal Dead Zorro)

在JavaScript中let与var的另一个区别,let不会被定义提升,简单来说就是在作用域内,let一定不能先使用,再定义。

原理:在JavaScript引擎解析代码时,发现作用域内是 let 定义变量,那么实际定义之前的这部分,被标记为临时死域,一旦引用就抛出错误ReferenceError

全局定义

注意:全局的let定义和var也有不同,let定义的变量不会绑定到window

举个栗子

let name = 'Gfred'
console.log(window.name)

var age = 66
console.log(window.age)

通过window可以访问到var定义的全局变量,而let不行

注意:let尽量不要用在for循环的条件表达式里,如果用在了表达式里,离开了for循环的的作用域,则无法访问,因为let是块级作用域

变量小结

少用var,除了for循环,多用let,const在确定数据不改的时候比let好

2、数据类型

1、JavaScript原始数据类型:Undefined、Null、Boolean、Number、String、Symbol

2、对象类型

注意:变量声明不赋值,默认返回一个Undefined类型undefined值

null类型数据是一个空对象指针

注意:使用 == 进行比较null和undefined结果是true,使用null和undefined单独进行if判断,自身的结果都是false。

Number类型包括:整型(也包括八进制和十六进制)和浮点型(也包括双精度)

注意:

1、浮点型如果小数点后面写0或者不写值,默认自动转换为整型

2、浮点型的数值需要的内存空间在JavaScript中是整型的两倍

3、浮点型的多位小数计算要比一位精准,比如,0.1+0.2可能得到的结果是

0.30000000000004,需要注意