js随手记-1

1.数据类型

1.1 基本数据类型

  • undefined
  • null
  • number
  • boolean
  • string

1.2 引用类型

  • object

Function,Arrayd其实也是object,部分文章会把Function也归为基本数据类型。ES6里添加了symbol,是基本数据类型javascript

1.3 typeof操做符

typeof操做符返回一个字符串,表示未经计算的操做数的类型java

| 对应表 |git

图片原文连接
上面是一些容易混淆的,顺便解释下typeof null === 'object', 在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。因为 null 表明的是空指针(大多数平台下值为 0x00),所以,null的类型标签也成为了 0,typeof null就错误的返回了"object"。将错就错,记住就好。

1.3.1 Call方法

typeof好玩的就是何时是object何时是function(此问题面试一问估计会问倒一批人哈哈)。毕竟function自己也是object,如Specification所示,function实现了call方法。仔细一想,call貌似也只能在function中起做用。好比用call来实现继承(虽然看起来略显丑陋)github

2.操做符

2.1 双等和三等

双等不判断类型,三等判断类型。这种机制会有一些骚操做。 好比0 == ''为true, [0] == false为true等。
以前有个特别火的问题,if(a==1 & a==2 & a== 3)可否断定为true?。
答:双等时若是左右类型不一样,会调用valueOf,若是valueOf仍是类型不一样再调用toString。因此解决上面的问题,重写对象的valueOf或者toString方法便可。下面两段代码面试

const a = {
  i: 1,
  valueOf: function () {
    return a.i++; 
  },
  //toString: function () {  重写valueOf和toString均可以
  //  return a.i++;
  //} 
} 

if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}
复制代码

对于if(a==1 & a==2 & a== 3)为true这个问题,我也有一个另类的实现思路,即经过运算符重载实现。能够经过babel来实现运算符重载,令a的==操做符永远返回true。有兴趣能够搜一下运算符重载的babel插件,在此就不赘述。bash

原文连接(github.com/sparkxxxxxx…)babel

相关文章
相关标签/搜索