Instanceof与typeof方法返回的对象类型相矛盾
instanceof contradicts the object type returned by typeof method
这里我有一个包含6个元素的number数组。
var arr=[1.22,2.33,2.002,3.992,3.05,5.44];
则将每个元素存储在一个变量中,并试图找出它是什么类型的对象。我尝试了typeof和instanceof .typeof,说我用来包含数组值的变量是一个数字,但说它不是一个数字的实例。那么哪一个是正确的…
然后我稍微改变了数组。使用字符串值而不是数组中的数字..
var arr=["1.22","2.33","2.002","3.992","3.05","5.44"];
这里的也typeof声明值是数字类型,而instanceof则相反。所以我可以说使用typeof而不是instanceof是安全的。所以我的问题是什么时候使用typeof,什么时候使用instanceof,以及如何避免这种类型的混淆?
代码:
<script>
function init() {
var arr = ["1.22", "2.33", "2.002", "3.992", "3.05", "5.44"];
for (i = 0; i < arr.length; i++) {
var bag = arr[i];
alert(typeof bag == 'string');
alert(bag instanceof String);
}
}
window.onload = init;
</script>
typeof表示我用来包含数组值的变量是一个数字,但是instance of表示它不是一个数字。那么哪个是正确的呢?
。: -)
JavaScript有原语和对象版本的数字、字符串和布尔值。typeof
表示,对于原始数,"number"
不是对象,因此不是instanceof Number
。
var a = 5;
console.log(typeof a); // "number"
console.log(a instanceof Number); // false
是非常罕见的你会想要显式地创建和保持对对象版本的数字、字符串或布尔值的引用。
那么我们为什么要有它们呢?所以我们可以把方法放在原语上。让我们再次查看上面的a
变量,并在末尾添加另一条语句:
var a = 5;
console.log(typeof a); // "number"
console.log(a instanceof Number); // false
console.log(a.toFixed(3); // "5.000"
啊?a
是一个原始数。原语没有方法。那么我如何调用toFixed
方法呢?
你可以创建一个Number
实例:
var a = new Number(5);
console.log(typeof a); // "object"
console.log(a instanceof Number); // true
…但是,这是非常非常罕见的事情
instanceof()
更适合在需要检查该变量是否是someClass
的实例时使用。
和typeof()
最好使用当你想获得类型的变量,而不是检查从哪个类创建这个实例。
另外,请阅读instanceof的工作原理和typeof的工作原理。
UPD:我可爱的例子来区分它们:
var array = [];
typeof array == 'array'; // false
typeof array == 'object'; // true
array instanceof Object; // true
array instanceof Array; // true
- 字符串对象类型或基元类型也是如此
- 如何在dojo中查询对象类型
- 对象类型scrollTo
- 在 Javascript 中创建全局变量时是否需要指定对象类型
- JavaScript:创建新对象类型的方法
- 如何获取对象类型
- FormData()只发送对象类型的多文件
- 获取对象类型
- 依赖对象类型检查Javascript似乎是多余的
- 访问javascript中对象类型的数组成员
- 比较对象类型时是否需要第三个=
- 如何在 Google 闭包编译器中指定对象类型的@param @return
- 窗口对象通过对象类型测试,但 hasOwnProperty 导致错误
- Javascript 空对象类型
- 何时有时将对象类型定义为将实例绑定方法镜像为构造函数上的静态实用程序函数很有用
- 在下拉列表中使用多个对象类型为数据网格提供筛选
- 为什么 String.prototype 中的“this”指的是对象类型,而不是字符串类型
- 自定义对象/类型 Javascript
- 在 Javascript 中获取对象类型的名称
- 两种 JavaScript 对象类型之间的差异