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

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却指向相应的包装类型。。

天蓬老师
天蓬老师

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

reply all(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

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

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!