博主微信:jiayou321xiaoyu 加微信,备注:前端Tree

面试题–js高级–数据类型&typeof关键字

面试攻坚 admin 10℃ 0评论
    //1. js中使用 typeof 能得到的类型有哪些?
    //数据类型有哪些:
    //简单数据类型 又称为值类型 number string boolean undefined null
    //复杂数据类型 object (JS中一切皆对象 除了值类型)
    //typeof是一个关键字 可以判断数据类型 把类型信息当做字符串返回
    console.log(typeof undefined); //undefined
    console.log(typeof ‘abc’); //string
    console.log(typeof 123); //number
    console.log(typeof NaN); //numer
    // NaN not a number 表示不是一个数值 但是NaN本身自己是一个数值类型
    console.log(typeof true); //boolean
    console.log(typeof {}); //object
    console.log(typeof []); //object
    console.log(typeof null); //object
    console.log(typeof console.log); //function
    //console.log不是js方法 是各个浏览器提供的一个方法
    function fn() {
    }
    console.log(typeof fn); //function
    //总结:
    //typeof返回值有6中可能
    //”number” “string” “boolean” “undefined” “object” “function”
    //这道题到这里就结束了吗?
    //扩展:
    //关于 typeof null 返回一个object的历史问题
    //(MDN)在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null的类型标签也成为了 0,typeof null就错误的返回了”object”。(大致看下即可 不需要纠结)
    //ECMAScript提出了一个修复,但被拒绝。这将导致typeof null === ‘object’。
    //从逻辑角度来说 null值表示了一个空对象指针,这也是正是为什么typeof关键字检测null会返回一个“object”的原因
    //故: 一般情况下 如果我们定义了一个变量准备在将来用来保存对象 那么最好是将这个变量的初始值设置为null 这样一来 只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用
    //实际上 undefined 是派生自null的 因此ECMA-262规定对他们的相等测试返回true
    //也就是咱们之前说的 null和undefined与任何值都不相等 除了null和undefined
    console.log(null == undefined);
    console.log(null == null);
    console.log(undefined == undefined);
    console.log(undefined === null);
    //尽管null和undefined有着以上这类关系 但是他们用途完全不一样。
    var obj = null;
    var obj = undefined; //无论什么情况下 咱们都不会把一个变量的值显式的设置成undefined
    //但是对于null却不一样 只要我们声明的变量最终的目的是为了保存一个对象的引用 那么在最开始就可以明确的将该变量的值初始化成null

转载请注明:前端Tree » 面试题–js高级–数据类型&typeof关键字

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址