最近看到这个有点兴趣,那就花点时间研究一下。
纯 js,感觉空空的,顺带一个彩蛋:inline元素设置 absolute或者 fix 后会变成 block 元素。
不多说,贴代码吧。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> .absolute-inline { position: absolute; width: 100px; } .inline-elem { width: 100px; /*doesn't work*/ } </style> </head> <body> <div> <span class="absolute-inline">行内元素设置position fixed/absolute 变成block</span> </div> <span class="inline-elem">行内元素设置position fixed/absolute 变成block</span> <script> console.log(null == undefined, NaN == NaN, {} == {}, null === undefined, NaN === NaN, {} === {}) console.info('typeof会把所有的数组类型以及用户自定义类型判断为object,从而无法知道更确切的信息。而constructor却可以解决这个问题。') //typeof 返回 number,boolean,string,object,undefined,function.语法为typeof(data) 或 typeof data //instanceof则为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型 //语法为 o instanceof A var i; console.log(typeof(i));//undefined // console.log(i.constructor);//返回错误 Uncaught TypeError: Cannot read property 'constructor' of undefined console.info('Array') var arr = [],arr2 = new Array(1,2,3); console.log(typeof(arr));//object console.log(typeof(arr2));//object console.log(arr instanceof Array);//true console.log(arr2 instanceof Array);//true console.log(arr.constructor);//function array(){[native code]} console.log(arr2.constructor);//function array(){[native code]} console.info('String type') var str = 'this is a string', strObj = new String('this is a objString'); console.log(typeof(str));//string console.log(str instanceof String);//false!!! console.log(strObj instanceof String);//true console.log(typeof(strObj));//object console.log(str.constructor);//function String() { [native code] } console.log(strObj.constructor);//function String() { [native code] } console.info('Function') var myFunc = function () { }; var myFunc2 = new Function(); console.log(typeof myFunc);//function console.log(typeof myFunc2);//function console.log(myFunc instanceof Function);//true console.log( myFunc2 instanceof Function);//true console.log(myFunc.constructor);//function Function() { [native code] } console.log(myFunc2.constructor);//function Function() { [native code] } </script> </body> </html>
比较好玩的一点是,string 类型, 用 str=""的方式跟 str= new String("")的方式出来的 typeof 是不一样的,对于 instanceof 也是,str=""的 instanceof String返回 false,new String返回的是 true,而 constructor 就可避免这个问题,赞!
而对于 Array 和function 类型, 则不存在这样的差异