JavaScript的常用判断 | 8月更文挑战

229 阅读3分钟

这是我参与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执行的时候会有上下文,可执行上下文的环境又有外部的语句,我们可以获取引用外部环境语句的变量等,这些引用串联起来形成作用域链。

今天不开心,先这样