Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的点运算符_Javascript - Fatal编程技术网

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属性的来源)
签出这个JS。就因为你看不见

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

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”(他的博客文章也很棒)。如果你感到受虐狂,它也可能在语言规范中。