这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
一、如何判断是否是数组
1、使用ES6的新语法isArray
let a = [1,2,3]
if(Array.isArray(a)) {
return true;
}
2、使用兼容的语法toString
let a = [1,2,3];
if(!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
}
}
二、null和undefined区别
1、null表示空,表示不应该有值,一个对象可以设置为null表示一个空对象,所以null本身也是一个对象。
2、undefined表示不存在,javaScript是动态类型的语言,因为值存不存在只有运行的时候才能知道,所以除了表示空值之外也表示根本就不存在。
null == undefined;//true
三、0.1+0.2为什么不等于0.3?
0.1 + 0.2 = 0.30000000000000004;
1、由于js的数字类型Number是IEEE 754标准,使用的是64位固定长度来表示
2、IEEE 754由三个区域组成:
1)分别为符号位(sign bit):64位系统占1位,正数为0,负数为1
2)指数偏移值(exponent bias):64位系统占11位,双精度浮点数固定偏移值加上指数实际值的11位二进制表示
3)分数值(fraction):64位系统占52位
3、由此通过公式表达:value = sign * exponent * fraction
0.1的转换过程
1)把0.1转换为二进制,把0.1的小数部分乘以2,然后取整数部分的结果,再用计算后的小数部分重复计算,直到小数部分为0,0.1的转换结果为下:
小数 *2的结果 整数部分
0.1 0.2 0
0.2 0.4 0
0.4 0.8 0
0.8 1.6 1
0.6 1.2 0
0.2 0.4 0
0.4 0.8 0
0.8 1.6 1
………………
2)转换为二进制后通过科学计数法表示,0.00010…无限重复0011,通过科学计数法表示:1.10011001……无限重复1001*2
3)把通过科学计数法表示的的二进制转换为IEEE 754标准展示,这时候可以拿到指数偏移值和分数值
0.1的指数偏移值 = 1023 + (-4) = 1019的11位二进制,表示为:011 1111 1011
分数值等于 = 0 011 1111 1011 1001...( 11 x 1001)...1010
(sign bit) (exponent bias) (fraction)
四、类型转换的原理
类型转换表示将一种类型转换为另一种类型,刚刚说javascript是动态类型的语言,可以随时赋值任何类型的值,但是判断等一些逻辑运行中类型提前设定了,所以js引擎会在运算时为变量设定类型。
在if语句、逻辑语句、数学运算、 == 这些判断条件下都可能出现隐式类型转换
//例如:
false == 0;//true
true == 1;//true
'1' == 1;//true
[] == 0;//true
五、javascript作用域
javaScript是静态作用域链,就算声明的作用域根据上下文确定的。本质就算js执行的时候会有上下文,可执行上下文的环境又有外部的语句,我们可以获取引用外部环境语句的变量等,这些引用串联起来形成作用域链。
今天不开心,先这样