Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript instanceof与typeof方法返回的对象类型相矛盾_Javascript_Arrays - Fatal编程技术网

Javascript instanceof与typeof方法返回的对象类型相矛盾

Javascript instanceof与typeof方法返回的对象类型相矛盾,javascript,arrays,Javascript,Arrays,这里我有一个包含六个元素的数字数组 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"]; 这里还有type

这里我有一个包含六个元素的数字数组

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声明值是number类型,而instanceof声明相反的值。 因此,我可以说使用typeof而不是instanceof是安全的。所以我的问题是何时使用typeof,何时使用instanceof,如何避免这种混淆

代码:


函数init(){
var-arr=[“1.22”、“2.33”、“2.002”、“3.992”、“3.05”、“5.44”];
对于(i=0;i
类型是指我用来包含数组值的变量是一个数字,但实例是指它不是一个数字。那么哪一个是正确的呢

两者都有。:-)

JavaScript有数字、字符串和布尔值的基本版本和对象版本
typeof
表示原始数字的
“number”
,这些数字不是对象,因此也不是数字的
实例

var a = 5;
console.log(typeof a);            // "number"
console.log(a instanceof Number); // false
非常罕见的是,您需要显式地创建并保留对数字、字符串或布尔值的对象版本的引用

那为什么我们有它们呢?所以我们可以在原语上找到方法。让我们再次查看上面的my
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
…但是,这是一件非常非常罕见的事情

类型是指我用来包含数组值的变量是一个数字,但实例是指它不是一个数字。那么哪一个是正确的呢

两者都有。:-)

JavaScript有数字、字符串和布尔值的基本版本和对象版本
typeof
表示原始数字的
“number”
,这些数字不是对象,因此也不是数字的
实例

var a = 5;
console.log(typeof a);            // "number"
console.log(a instanceof Number); // false
非常罕见的是,您需要显式地创建并保留对数字、字符串或布尔值的对象版本的引用

那为什么我们有它们呢?所以我们可以在原语上找到方法。让我们再次查看上面的my
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
…但同样,这是一件非常非常罕见的事情。

instanceof()
当您想检查该变量是否是某个类的实例时,最好使用它

typeof()
当您想要获取变量类型时,最好使用,而不是检查创建此实例的类

另外,阅读instanceof的工作原理和typeof的工作原理

UPD:我可爱的例子说明了这两者之间的区别:

var array = [];
typeof array == 'array'; // false
typeof array == 'object'; // true
array instanceof Object; // true
array instanceof Array; // 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

您的字符串是基本体。将它们更改为
String(“1.22”)
将允许instanceof工作可能重复的字符串是基本体。将其更改为
String(“1.22”)
将允许instanceof工作可能重复的感谢您的解释:)因此,我可以说instanceof仅在我们使用新关键字创建对象时有效吗?@user3138436:
instanceof
仅对对象有效(无论它们是如何创建的)。原语不是任何事物的
实例(因为它们不是实例)。因此它适用于
[]
例如(
[]数组的instanceof
将为true),但不适用于
的“foo”
true
27.4
:-)我博客上的这篇文章可能很有用:
那我们为什么要有它们呢?
因为在javascript中,一切都是一个对象,但是原语是用来让生活变得简单的(所以
a===5
而不是
a.valueOf()==5
;-)@RobG:-)当然,javascript中的一切都不是对象——我们有原语!(只有这四个[如果包括
未定义的
],但是…)如果所有内容都是对象,那么
valueOf
返回什么?;-)谢谢你的解释……:)因此,我可以说instanceof仅在我们使用新关键字创建对象时有效吗?@user3138436:
instanceof
仅对对象有效(无论它们是如何创建的)。原语不是任何事物的
实例(因为它们不是实例)。因此它适用于
[]
例如(
[]instanceof