javascript中的点运算符
我认为点运算符只能应用于对象以访问其属性。例如,javascript中的点运算符,javascript,Javascript,我认为点运算符只能应用于对象以访问其属性。例如, var o={prop:'property'}; alert(o.prop);//property 当JS执行警报时(o.prop)将找到通过引用包含的第一个对象o,然后将找到通过引用包含的属性o.prop 让我们写信吧 simple='hello'; alert(simple.length);//5 我不明白。我认为控制台中会出现某种错误,因为simple不是对象。在javascript中,一切都是对象 {}==对象 ===对象(一个数组
var o={prop:'property'};
alert(o.prop);//property
当JS执行警报时(o.prop)
将找到通过引用包含的第一个对象o
,然后将找到通过引用包含的属性o.prop
让我们写信吧
simple='hello';
alert(simple.length);//5
我不明白。我认为控制台中会出现某种错误,因为simple不是对象。在javascript中,一切都是对象
- {}==对象
- ===对象(一个数组,但仍然是一个对象,因为它的属性通常不会显示给您,如
和length
等)indexOf()
- 又是一个物体!(这就是获取string.length属性的来源)
Object.getOwnPropertyNames(String)
根据具体情况,您将得到以下结果:
[
"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"
]
JavaScript自动将原语转换为字符串对象,因此可以对原语字符串使用字符串对象方法 因此,您的
simple
var是一个字符串实例,它继承自string.prototype
参考:
simple
不是对象
实际上,它是一个字符串对象。将字符串方法应用于string
对象时,将基本字符串类型JS到该对象
在JavaScript中说“一切都是对象”是错误的,因为有些基元类型不是对象,包括字符串基元。在许多情况下,原语和对象之间的隐式转换很容易掩盖事实
JavaScript自动将原语转换为字符串对象,因此
可以对基本字符串使用字符串对象方法
字符串是JS固有的对象。因此,它还具有固有的特性,长度是其中之一。此属性会显示字符串对象中的字符数(如您所见)
如果您愿意,您可以覆盖任何固有JS对象(字符串、数组等)的固有功能并创建自己的功能,但这通常是一个非常糟糕的主意 当您执行类似于simple.length
的操作时发生的情况是,在引擎盖下,浏览器临时将simple
转换为String
类型的对象,然后查找length
。这几乎就像调用newstring(simple)
一样,只是浏览器实际上不需要创建新对象,它只需要像创建了新对象一样运行。需要注意的一点是,这一切都是暂时的:
simple.newProp = 123; // will execute fine
simple.newProp; // will return undefined
你的意思是当我们编写simple='hello'时,我们有一个[[Extensible]]]=false的对象代码>内部属性你的例子反驳了你的观点:试试对象。getOwnPropertyNames(“hello”)
@Juhana:这里的“hello”不是字符串对象,而是字符串。数字和布尔值也是一样的。您必须尝试以下操作:Object.getOwnPropertyNames(新字符串(“hello”)
返回[length,0,1,2,3,4]
是的,我就是这么说的。OP没有新字符串(“hello”)
,它们只有“hello”
。“在JavaScript中,一切都是对象”——除了不是对象的东西,对吗?当然是,simple
是一个string
对象。JavaScript中的所有内容都是object@Adam我认为你是不正确的,数字、字符串、布尔值未定义、null都不是对象。您可以删除您的评论。在ECMA-262中,参考了[[Extensible]]
内部属性。对于所有转换为object JS的原语,是否会自动将[[Extensible]]]=false代码>?@SurajJain我记不清了-那是很久以前的事了。也许是尼古拉斯·扎卡斯(Nicholas Zakas)的“面向Web开发人员的专业JavaScript”(他的博客文章也很棒)。如果你感到受虐狂,它也可能在语言规范中。