typeof constructor instanceof 判断类型

最近看到这个有点兴趣,那就花点时间研究一下。

纯 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 类型, 则不存在这样的差异





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值