本文介绍一些JS的特别的语法特性,大家面试前可以看看
- var定义的变量有变量提升,function定义的实名函数有变量提升
- ES5中只有全局作用域和函数作用域两个,没有局部作用域的说法,只有try…catch中的catch块算是个局部作用域
- typeof目前可以检测出八种值,返回值为字符串:数字(‘number’)、字符串(‘string’)、布尔值(‘boolean’)、undefined(‘undefined’)、函数对象(‘function’)、symbol值(‘symbol’)、bigInt值(‘bigint’)、狭义对象或Array或null(‘object’)
- instanceof用于检测左边的值是否是右边构造函数的实例(会在原型链上查找),返回值为boolean值,如果左侧的值不为对象,则返回false(不会使用包装对象)
- 对于转换成boolean值,只有以下六种值会当成false:undefined、null、false、0、NaN、空字符串
- JS中所有的数字都是以浮点数的形式存储的,所以:1 === 1.0
小数的数字运算容易丢失精度,而整数的数字运算在结果区间(-253, 253)中是准确的。 - 小数点前的数字多于21位,小数点后的零多于5个时,会使用科学计数法表示:
// 注意,此时使用String()转换成字符串会是科学记数法的字符串
1000000000000000000000 // 1e+21,超出2^53,已经不准确了
1000000000000000001000.111111111 // 1e+21
0.0000001 // 1e-7
1.0000001 // 1.0000001,如果小数点前不为零,则不会用小数的科学记数法