html5 - javascript中的类型
天蓬老师
天蓬老师 2017-04-10 17:47:12
0
3
416

1.在《JavaScript高级程序设计》第三版的第23页,作者有很明确的描述:

ECMAScript中有5种简单数据类型(Undefined,Null,Boolean,Number,String),一种复杂类型(Object)

2.在JavaScript秘密花园的对象部分,也有很明确的描述:

JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined

所以我的问题是:

1.var bol = true; var num = 1; var str = 'abc',其中的bol,num,str到底是对象还是基本类型?

2.JavaScript中声明了一个基本类型,到底有没有调用相应包装类型的构造器?

下面是我做的测试,大神可忽略:

var num = 1; var numObj = new Number(1); console.log(num instanceof Number); // false console.log(num.constructor); // Number console.log(numObj instanceof Number); // true console.log(numObj.constructor); // Number var bol = true; var bolObj = new Boolean(true); console.log(bol instanceof Boolean); // false console.log(bol.constructor); // Boolean console.log(bolObj instanceof Boolean); // true console.log(bolObj.constructor); // Boolean var str = "abc"; var strObj = new String("abc"); console.log(str instanceof String); // false console.log(str.constructor); // String console.log(strObj instanceof String); // true console.log(strObj.constructor); // String

测试中有很疑惑的地方:基本类型的值,它们虽然不是相应包装类型的实例,但是constructor却指向相应的包装类型。。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆 (3)
大家讲道理

《秘》里说所有变量都是对象这种说法是值得怀疑的
简单基本类型(string,boolean,number,null,undefined)本身并不是对象

var num = 1; typeof a // "number"

num是基本类型number,不是object

从下面你的代码也可以看出

console.log(num instanceof Number); // false

所以第一个问题

基本类型

但为何

console.log(num.constructor); // Number

其实num背后默认调用Number构造器构造了一个Number包装类型(这个包装类型其实和Java那一套很像,只不过JS的包装类型是通过调用构造函数Number来完成的),从而让num成为了一个对象,也就有了上面的情况

第二个问题

没有,但当成对象来用(调用属性,方法)时,才会调用构造器,你的代码num.constructor返回Number很清楚说明了这个问题

    黄舟
    1. 基本类型

    2. 没有,只有在表达式中用作对象时,才会自动包装

      Ty80

      他们都是基本类型,却可以使用对应对象类的构造函数原型链中的函数。
      这个算是一种语法吧。

        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!