这里我有一个包含六个元素的数字数组。
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>
答案 0 :(得分:4)
typeof说我用来包含数组值的变量是一个数字,但是说它不是数字的实例。那么哪一个是正确的。
两者。 : - )
JavaScript包含数字,字符串和布尔值的原语和对象版本。 typeof
对{em>原始数字"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
方法?
答案是JavaScript引擎暂时将原语提升为等效对象类型,使用该对象类型的方法,并抛弃该对象。 (理论上;当然,在实践中,引擎会优化流程。)
您可以实际创建Number
个实例:
var a = new Number(5);
console.log(typeof a); // "object"
console.log(a instanceof Number); // true
......但同样,这是一件非常非常罕见的事情。
答案 1 :(得分:1)