Nodejs相关的一个javascript问题。

Nodejs相关的一个javascript问题。

######如题,仅仅是javascript语法问题。我找了很多资料也没有理出头绪,包括[javascript 神秘花园](http://bonsaiden.github.com/JavaScript-Garden/zh/#object.general)

废话不说,上代码

var a = {0:1,1:1,2:3,length:3};

上面创建了一个a对象。我想知道的是,a对象中,a[1]是什么类型?OK,做如下试验。

a[1] instanceof Number
   //false
typeof a 
    //return number

…那么a[1]到底是什么类型?难道不是数字吗?那么为什么

a[1]instanceof Number 

回返回false


9 回复

根据你提供的代码片段,让我们来分析一下 a 对象的结构以及 a[1] 的类型。

首先,我们来看一下 a 对象的定义:

var a = {0:1,1:1,2:3,length:3};

这里创建了一个具有三个属性的对象 a,它们分别是 0, 1, 和 2,并且 length 属性被设置为 3。这种对象通常用于模拟数组的行为,但并不完全符合 JavaScript 中数组的标准行为。

接下来,我们来分析 a[1] 的类型。

分析 a[1] 的类型

  1. typeof a[1]:

    typeof a[1]
    

    这个表达式会返回 "number",因为 a[1] 的值是 1,而 1 是一个数值。

  2. a[1] instanceof Number:

    a[1] instanceof Number
    

    这个表达式会返回 false,因为 a[1] 的值是一个原始类型的数值,而不是 Number 构造函数创建的对象实例。

示例代码

为了更好地理解这一点,我们可以运行以下代码:

var a = {0:1, 1:1, 2:3, length:3};

console.log(typeof a[1]); // 输出 "number"
console.log(a[1] instanceof Number); // 输出 false

解释

  • typeof a[1] 返回 "number",因为 a[1] 的值是 1,这是一个原始类型的数值。

  • a[1] instanceof Number 返回 false,因为 a[1] 的值是原始数值 1,而不是通过 new Number(1) 创建的对象。

总结

a[1] 的类型是 number,但它不是一个 Number 对象实例。这是因为在 JavaScript 中,原始类型的数值(如 1)和通过构造函数创建的 Number 对象是有区别的。原始类型的数值没有原型链上的方法或属性,而 Number 对象实例则有这些方法和属性。


不是很清晰, 但 instanceof 还真不是按字面理解的, 比如这个:

a = {}
a.__proto__ = Number.prototype
a instanceof Number

问的问题不够清晰嘛?

(1) instanceof Number
// false

说明数值并不是Number类型

那为什么

typeof a[1] 
  //return number
console.log(typeof 1, 1 instanceof Number);//number false

var nu = new Number(1);
console.log(typeof nu, nu instanceof Number);//object true

原因:

object instanceof constructor

#具体分析见MDN enter link description here

我大概明白了

instanceof  

的使用需要new出来一个对象,这个对象有constructor属性。constructor属性里是这个对象的类型名称。

a[1]

不是new出来的对象而是基本类型。没有constructor属性。但是

typeof a[1]

可以检测类型,并返回类型的名称。 感谢感谢

typeof a[1] ==> 'number'a[1] instanceof Number ==>false不矛盾,说明a[1]是primitive type而非object type 别太纠结,只要记住,typeof o != 'object',则 instanceof运算毫无意义

根据你提供的代码片段和描述,让我们详细分析一下 a 对象中的 a[1] 的类型。

代码分析

var a = {0:1, 1:1, 2:3, length:3};

这里创建了一个对象 a,它具有三个属性 0, 1, 和 2,并且定义了 length 属性为 3。尽管看起来像是一个数组,但它实际上是一个普通对象(因为没有使用数组字面量 [...] 创建)。

a[1] 的类型

a[1] instanceof Number

  • a[1] instanceof Number 返回 false。这是因为 a[1] 是一个数字字面量 1,而不是 Number 对象实例。在 JavaScript 中,instanceof 操作符用于检查某个对象是否是某个构造函数的实例。由于 1 是一个原始类型的数字,而不是 Number 对象,因此 instanceof Number 返回 false

typeof a[1]

  • typeof a[1] 返回 "number"。这是因为 a[1] 存储的是一个数字字面量 1,所以 typeof 操作符会正确地识别它为 number 类型。

总结

  • a[1] 的实际值是 1,这是一个数字字面量。
  • a[1] instanceof Number 返回 false 是因为 1 不是 Number 对象的实例,而是一个原始类型的数字。
  • typeof a[1] 返回 "number" 是正确的,因为它确实是一个数字。

示例代码

var a = {0:1, 1:1, 2:3, length:3};

console.log(a[1]);           // 输出 1
console.log(typeof a[1]);    // 输出 "number"
console.log(a[1] instanceof Number); // 输出 false

解释

  • a[1] 是一个数字字面量 1
  • typeof a[1] 正确地返回 "number"
  • a[1] instanceof Number 返回 false,因为 1 不是 Number 对象的实例,而是一个原始类型的数字。
回到顶部