Underscore.js
没有对原生 JavaScript
对象进行扩展,而是通过调用 _()
方法进行封装,一旦封装完成,原生 JavaScript
对象便成为一个 Underscore
对象。
判断给定变量是否是对象
// Is a given variable an object?
_.isObject = function(obj) {
var type = typeof obj;
return type === 'function' || type === 'object' && !!obj;
};
这是underscore.js
的判断给定变量是否是object
的一段源码。 我们知道typeof
会返回如下六个值:
1. 'undefined' --- 这个值未定义;
2. 'boolean' --- 这个值是布尔值;
3. 'string' --- 这个值是字符串;
4. 'number' --- 这个值是数值;
5. 'object' --- 这个值是对象或null;
6. 'function' --- 这个值是函数。
而&&
的优先级要高与||
。!!
的作用相当于Boolean()
,将其转换为布尔值。
判断给定值是否是DOM元素
// Is a given value a DOM element?
_.isElement = function(obj) {
return !!(obj && obj.nodeType === 1);
};
同样!!
相当于Boolean()
的作用,nodeType === 1
则说明是元素节点,属性attr
是2 ,文本text
是3
<body>
<p id="test">测试</p>
<script>
var t = document.getElementById('test');
alert(t.nodeType);//1
alert(t.nodeName);//p
alert(t.nodeValue);//null
</script>
</body>
firstChild
属性
var t = document.getElementById('test').firstChild;
alert(t.nodeType);//3
alert(t.nodeName);//#test
alert(t.nodeValue);//测试
文本节点也算是一个节点,所以p的子节点是文本节点,所以返回3
转载请注明:苏demo的别样人生 » underscore.js源码