我認爲點運算符可以應用於僅用於訪問其屬性的對象。即例如javascript中的點運算符
var o={prop:'property'};
alert(o.prop);//property
當JS執行包含由參考o
將發現將進一步發現屬性至極含有由參考o.prop
alert(o.prop);
第一個對象。
讓我們寫
simple='hello';
alert(simple.length);//5
我不明白這一點。我例外,在控制檯會有一種錯誤,因爲簡單是沒有對象。
我認爲點運算符可以應用於僅用於訪問其屬性的對象。即例如javascript中的點運算符
var o={prop:'property'};
alert(o.prop);//property
當JS執行包含由參考o
將發現將進一步發現屬性至極含有由參考o.prop
alert(o.prop);
第一個對象。
讓我們寫
simple='hello';
alert(simple.length);//5
我不明白這一點。我例外,在控制檯會有一種錯誤,因爲簡單是沒有對象。
我例外,在控制檯將一種錯誤,因爲
simple
是沒有對象。
其實,這是一個對象String
。 JS implicitly converts將字符串方法應用於該對象時,原始字符串類型爲String
對象。
在JavaScript中說「一切都是對象」是錯誤的,因爲是不是對象的基本類型,包括字符串基元。在很多情況下,基元和對象之間的隱式轉換很容易模糊事實。
1,感謝上原語 –
在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"
]
你的意思是,當我們編寫簡單=「你好」,我們有一個對象'[擴展] = FALSE;'內部屬性 –
你舉的例子反駁你的觀點:嘗試'Object.getOwnPropertyNames(「你好「)。 – JJJ
@Juhana:這裏的「hello」不是一個String對象,它是一個字符串[primitive](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#Distinction_between_string_primitives_and_String_objects) 。 Numbers和Booleans也是如此。 你必須試試這個:Object.getOwnPropertyNames(new String(「hello」));'這將返回'[length,0,1,2,3,4]' –
的JavaScript自動轉換元轉換爲String對象,以便可以對原始字符串使用String對象方法。
因此,您的simple
var是一個字符串實例,它從String.prototype
繼承。
編號:
從https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String
的JavaScript自動轉換原語String對象引用,所以 ,它可能使用字符串原始的字符串對象的方法。
點在ECMA-262下文稱爲'[[擴展]]'內部屬性。這是真的,對於所有基元轉換爲對象JS自動設定'[[擴展]] = FALSE;'? –
字符串是固有的JS的對象。因此,它也具有固有的特性,長度就是其中之一。這個屬性吐出了字符串對象中的字符數(正如你所看到的那樣)。
如果你想要你可以覆蓋任何固有的JS Object(String,Array等)的固有能力,創建自己的功能,但這通常是一個非常糟糕的主意。
,當你做這樣的事情simple.length
發生了什麼事是,在引擎罩,瀏覽器是暫時轉換成simple
型String
,然後擡頭對length
的對象。這幾乎就像調用new String(simple)
除了瀏覽器實際上並不需要創建一個新的對象,它只是需要表現得好像它沒有。有一件事要注意的是,這全是暫時的:
simple.newProp = 123; // will execute fine
simple.newProp; // will return undefined
當然,'simple'是一個'string'對象。在JavaScript中的一切都是一個對象 – Adam