为什么JavaScript中 String.length==1?

有个疑问一直没搞明白。
String.length

原文如下:

The static property String.length returns the value 1.

两个问题:

  1. 为什么 String.length == 1

  2. static property,静态属性。在 JavaScript 中有静态属性这个概念?就像 Java一样,静态属性是属于类的属性(与实例无关,所有实例共享),但 JS中连类都没有(ES5),所以这说不通啊。

阅读 4.4k
2 个回答

先解答第二个问题,这个其实只是搬用过来的说法而已,指属性可以直接使用,不需要 new。当然 ES6 以后就有了真正的 static 方法。

看回第一个问题,等于 1 的原因其实不在于 String

看 spec 你会发现 String 只有四个属性String.fromCharCodeString.fromCodePointString.prototypeString.raw

这个 length 其实继承于 Function.prototype 的,函数实例的 length 为声明的参数长度,String 接受一个 value 参数,所以 length 为 1

ES5你可以把一个函数视为构造函数,进而视为一个类。而js又可以给函数附加成员,那么这些就算是静态成员了。
至于1,不知道,规定如此,那就如此吧…………

function Test(first, last) {
  // 实例成员
  this.first = first
  this.last = last
}
// 当作静态成员,实例不可访问
Test.test = 'test'
// 实例可访问的成员
Object.defineProperty(Test.prototype, 'fullName', {
  get() { return this.first + ' ' + this.last },
})

let t = new Test('Achael', 'Akinkaka')
console.log(Test.test)  // 'test'
console.log(t.test)     // undefined
console.log(t.first)    // 'Achael'
console.log(t.last)     // 'Akinkaka'
console.log(t.fullName) // 'Achael Akinkaka'
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题