due to there is no strict type checking, all the algorithms related to type checking are almost all heuristic progress,
“if there is a property of what, that could be xxx, or level down to other options”, you have to explore what it is through the way.
as this, in jquery.aop:
toStrings = {},
nodeTypes = { 1: 'element', 3: 'textnode', 9: 'document', 11: 'fragment' },
types = 'Arguments Array Boolean Date Document Element Error Fragment Function NodeList Null Number Object RegExp String TextNode Undefined Window'.split(' ');
//making a map of type
.....
return function(item) {
return item == null && (item === undefined ? _undef : 'null') ||
item.nodeType && nodeTypes[item.nodeType] ||
typeof item.length == 'number' && (
item.callee && _arguments ||
item.alert && 'window' ||
item.item && 'nodelist') ||
toStrings[toString.call(item)];
};
- null or undefined;
- nodetype exist in object, it could be of types in nodeTypes, including the built-in ones, the BOM, DOM ones
-or when length property exist, it could be Arguments, NodeList, window
interestingly, in BOM, DOM field, the __proto__ chain searching property mechanism is NOT always work, e.g. length in window, but check it , u will find:
Object.prototype.hasOwnProperty.call(window, "length") //false in FF, true in chrome
Object.prototype.toString.call(window.__proto__, "length") //false
....
"length" in window //true, //at least it can show that the implementation is not integrity somehow
-use Object.prototype.toString method to output its type information and use map constructed to output its type.
本文探讨了jQuery中一种类型的检查方法,通过构造映射表来识别不同的对象类型,如DOM元素、数组、函数等,并深入讨论了浏览器环境中某些特性的实现细节。
921

被折叠的 条评论
为什么被折叠?



