我认为点运算符只能应用于对象以访问其属性。即例如
var o={prop:'property'};
alert(o.prop);//property
当执行alert(o.prop);
第一个包含引用o
的第一个对象时,将会找到进一步包含引用o.prop
的属性。
让我们写一下
simple='hello';
alert(simple.length);//5
我不明白这一点。我除外,在控制台中会出现一些错误,因为简单不是对象。
答案 0 :(得分:6)
我除了在控制台中会出现错误,因为
simple
不是对象。
实际上,是一个String
对象。当您对其应用字符串方法时,JS implicitly converts将String
对象的原始字符串类型。
在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中,一切都是对象。
length
和indexOf()
等)结帐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对象(字符串,数组等)的固有能力并创建自己的功能,但这通常是一个非常糟糕的主意。