javascript中的点运算符

时间:2013-12-18 12:27:47

标签: javascript

我认为点运算符只能应用于对象以访问其属性。即例如

var o={prop:'property'};
alert(o.prop);//property

当执行alert(o.prop);第一个包含引用o的第一个对象时,将会找到进一步包含引用o.prop的属性。

让我们写一下

simple='hello';
alert(simple.length);//5

我不明白这一点。我除外,在控制台中会出现一些错误,因为简单不是对象。

6 个答案:

答案 0 :(得分:6)

  

我除了在控制台中会出现错误,因为simple不是对象。

实际上,一个String对象。当您对其应用字符串方法时,JS implicitly convertsString对象的原始字符串类型。

在JavaScript中说“一切都是对象”是错误的,因为基本类型,它们不是对象,包括字符串基元。在许多情况下,基元和对象之间的隐式转换很容易模糊这一事实。

答案 1 :(得分:4)

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

  

JavaScript会自动将基元转换为String对象,因此   可以对原始字符串使用String对象方法。

答案 2 :(得分:2)

JavaScript会自动将原语转换为String对象,因此可以将String对象方法用于原始字符串。

所以你的simple var是一个字符串实例,它继承自String.prototype

参考:

答案 3 :(得分:2)

当您执行simple.length之类的操作时,浏览器暂时simple转换为String类型的对象时,会发生什么然后在那上面查找length。这几乎就像调用new String(simple)一样,除了浏览器实际上不需要创建一个新对象之外,它只需要表现得像它一样。需要注意的一点是,这一切都是暂时的:

simple.newProp = 123;   // will execute fine
simple.newProp;         // will return undefined

答案 4 :(得分:0)

在javascript中,一切都是对象

  • {} === object
  • Array === object(一个数组,但仍然是一个对象,因为它具有通常不会显示的属性,如lengthindexOf()等)
  • string ===再次反对! (这是你从中获取string.length属性的地方)

结帐list of objects JS有。只是因为你看不到

{}

并不意味着变量不是对象。要获取数据类型的属性列表,可以在控制台中编写:

Object.getOwnPropertyNames(String)

根据your browser supports的内容,你会得到这个:

[
 "prototype", "quote", "substring", "toLowerCase", "toUpperCase",
 "charAt", "charCodeAt", "contains", "indexOf", "lastIndexOf", 
 "startsWith", "endsWith", "trim", "trimLeft", "trimRight",
 "toLocaleLowerCase", "toLocaleUpperCase", "localeCompare",
 "match", "search", "replace", "split", "substr", "concat",
 "slice", "fromCharCode", "length", "name", "arguments", "caller"
]

答案 5 :(得分:0)

String是JS固有的对象。因此,它也具有固有的特性,长度就是其中之一。此属性会吐出String对象中的字符数(如您所见)。

如果你想,你可以覆盖任何固有JS对象(字符串,数组等)的固有能力并创建自己的功能,但这通常是一个非常糟糕的主意。