美文网首页深入解读JavaScript
Javascript知识点收集

Javascript知识点收集

作者: 悟C | 来源:发表于2018-09-11 23:41 被阅读2次
    1. ~x等同于-(x+1),在-(x+1)中唯一能够得到0(或者严格说是-0)得x值是-1,也就是说如果x为-1时,~和一些数值在一起会返回假值0,其他情况则返回真值。我们可以用~配合indexOf:
    var test = '台风来了!';
    
    if (~test.indexOf('来了')) {
      console.log('台风来了!');
    }
    
    if (~test.indexOf('走了')) {
      console.log('台风走了!');
    } else {
      console.log('台风没走!');
    }
    //=>台风来了!
    //=>台风没走
    
    2. 其类型和布尔类型之间得相等比较,规则:
    • 如果Type(x)是布尔类型,则返回ToNumber(x) == y 的结果
    • 如果Type(y)是布尔类型,则返回x == ToNumber的结果
    var x = '42'
    var y = true
    
    console.log(x == y)
    // => false
    
    3. 相等比较的一个坑:
    function doSomething1(a) {
      if (a == "") {           // ""先进行Number("") 为0,然后0 == 0
        console.log('执行了1')
      }
    }
    
    function doSomething2(a, b) {
      if (a == b) {                    // []先进行toString() 为 ""
        console.log('执行了2')
      }
    }
    
    doSomething1(0)
    //=> '执行了1'
    doSomething2("", [])
    //=>'执行了2'
    

    (1) 如果Type(x)是数字,Type(y)是字符串,则返回x == ToNumber(y)的结果
    (2) 如果type(x)是字符串,Type(y)是数字,则返回ToNumber(x) == y的结果

    4. 对象作为映射的主要缺点是不能使用非字符串作为键,下面举个例子
    var m = {};
    var x = { id: 1 };
    var y = { id: 2 };
    m[x] = "foo";
    m[y] = "bar";
    
    m[x];  // "bar"
    m[y]; // "bar"
    

    这里发生了什么?x和y两个对象字符串化都是"[object object]",所以m中只设置了一个键。

    5.函数节流的代码实现:
    function throttle(fn, interval) {
      var _self = fn,
          timer,
          firstTime = true;
      
      return function() {
        var args = arguments,
            _me = this;
        
        if (firstTime) {
          _self.apply(_me, args);
          return firstTime = false;
        }
    
        if (timer) {
          return false;
        }
    
        timer = setTimeout(function() {
          clearTimeout(timer);
          timer = null;
          _self.apply(_me, args);
        }, interval || 500);
      }
    }
    
    
    6.懒性加载函数,通过第一次加载重写函数来避免重复的嗅探工作:
    function addEvent(elem, type, handler) {
      if (window.addEventListener) {
        addEvent = function (elem, type, handler) {
          elem.addEventListener(type, handler, false);
        }
      } else if (window.attachEvent) {
        addEvent = function (elem, type, handler) {
          elem.attachEvent('on' + type, handler);
        }
      }
      addEvent(elem, type, handler);
    }
    

    相关文章

      网友评论

        本文标题:Javascript知识点收集

        本文链接:https://www.haomeiwen.com/subject/mkmlmftx.html