zepto源码知识点

记录看源码时候不太了解的知识点

matchesSelector = element.matches ||element.webkitMatchesSelector ||element.mozMatchesSelector ||element.oMatchesSelector ||element.matchesSelector

关于H5新的选择器api之前只了解querySeletor和querySeletorAll,MatchesSelector这个方法是匹配是否符合选择器,返回值是true false;但是大多不支持,需要用到浏览器前缀,

<div class = 'theOne'></div>
let s = document.querySeletor('div').matchesSeletor('.theOne');
console.log(s);    //true;
match = ~zepto.qsa(parent, selector).indexOf(element)

有个不常用的运算符按位非运算符~
感觉是不实用的方法

let num = 23,
boo = false,
obj = {},
arr = [],
na = NaN,
str = 'abcdefg';
~num //-24,如果操作数能够转换为数值就直接取反并且减去一;
~obj     //-1,{}.[],undefined,null,false,NaN,“”都转化为数字0在取反
~str    //-1对无法转为数值的字符串等,转为0
//~的运算等级比.[]()优先级低

运算符优先级别大概的逻辑是
取值>一元操作符(包含非运算符!)>算术运算>大小比较>相等不相等>逻辑与或>赋值>三元>逗号

function isPlainObject(obj) {
            return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype
        }

undefined和null的区别
undefined == null //如果str == null那么str会有两个值成立
typeof null === 'object'
typeof undefined === 'undefined'

判断是否是类似的数组对象,即有Length属性

function likeArray(obj) {
    var length = !!obj && 'length' in obj && obj.length,    //综合判断obj是否存在,有length属性z如果都成立的话,最后取得Length的数值
     type = $.type(obj)   //判断obj的类型
      return 'function' != type && !isWindow(obj) && (//是否是function ,window,array
        'array' == type || length === 0 ||
        (typeof length == 'number' && length > 0 && (length - 1) in obj)
          )
        }

相关推荐