var a = "hello"
a instanceof String ===> false
var a = new String("hello")
a instanceof String ====> true
var b = [1,2]
b instanceof Array ===> true
var b = new Array(1,2)
b instanceof Array ===> true
为什么String 的两次结果是不一样的,而Array是一样的
var a = "hello"
a instanceof String ===> false
var a = new String("hello")
a instanceof String ====> true
var b = [1,2]
b instanceof Array ===> true
var b = new Array(1,2)
b instanceof Array ===> true
为什么String 的两次结果是不一样的,而Array是一样的
instanceof String
第一种没有原型链,undefined,所以是false。通过 new String()创造的是一个对象。
instanceof Array
两个都是数组对象。
关于基本数据类型的属性读取
在《JavaScript高级程序设计》中基本包装类型部分有详细的介绍,并且也对下面这两种不同方式有介绍。
var value = "25";
var obj = new Number(25);
针对在评论中的内容,摘录此部分:
而在读取模式中访问字符串时,后台都会自动完成下列处理。
(1) 创建 String 类型的一个实例;
(2) 在实例上调用指定的方法;
(3) 销毁这个实例。
可以将以上三个步骤想象成是执行了下列 ECMAScript 代码。
var s1 = new String("hello");
var constructor = s1.constructor;
s1 = null;
经过此番处理,基本的字符串值就变得跟对象一样了。而且,上面这三个步骤也分别适用于 Boolean和 Number 类型对应的布尔值和数字值。
instanceof
这个链接里例子部分有string的例子。
string创建
这个链接里有别人回答的字符串创建的方式。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
typeof操作符可以判断出number、boolean、string、function和undefined;( typeof 是一个操作符,主要的目的是检测一个变量是不是基本数据类型的变量,同时也可以说是确定一个变量是字符串,数值,布尔值,还是undefined的最佳工具。但 typeof null == 'object')
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。(基本类型不在链上,所以不适合检测基本类型(都是false))
其实typeof和instanceof的目的都是检测变量的类型,两个的区别在于typeof一般是检测的是基本数据类型,instanceof主要检测的是引用类型!