不要對字串、數字和布林文字可以被視為具有屬性的物件這一事實感到困惑(例如,true.toString()
)。當這些基元值透過嘗試存取其屬性而被視為對象時,JavaScript 將從基元的關聯構造函數建立包裝器對象,以便可以存取包裝器物件的屬性和方法。
#一旦存取了屬性,包裝器物件就會被丟棄。這種轉換允許我們編寫程式碼,使其看起來好像原始值實際上是一個物件。說實話,當它在程式碼中被視為物件時,JavaScript 會將其轉換為對象,以便屬性存取可以工作,然後在返回值後將其轉換回原始值。這裡需要注意的關鍵是正在發生的事情,而 JavaScript 正在幕後為您做這件事。
這裡有一些範例來示範我正在談論的內容:
字串範例:sample56.html
#<!DOCTYPE html><html lang="en"><body><script> // String object treated like an object. var stringObject = new String('foo'); console.log(stringObject.length); // Logs 3. console.log(stringObject['length']); // Logs 3. // String literal/primitive converted to an object when treated as an object. var stringLiteral = 'foo'; console.log(stringLiteral.length); // Logs 3. console.log(stringLiteral['length']); // Logs 3. console.log('bar'.length); // Logs 3. console.log('bar'['length']); // Logs 3. </script></body></html>
數字範例:sample57.html
#<!DOCTYPE html><html lang="en"><body><script> // Number object treated like an object. var numberObject = new Number(1.10023); console.log(numberObject.toFixed()); // Logs 1. console.log(numberObject['toFixed']()); // Logs 1. // Number literal/primitive converted to an object when treated as an object. var numberLiteral = 1.10023; console.log(numberLiteral.toFixed()); // Logs 1. console.log(numberLiteral['toFixed']()); // Logs 1. console.log((1234).toString()); // Logs '1234'. console.log(1234['toString']()); // Logs '1234'. </script></body></html>
布林範例:sample58.html
#<!DOCTYPE html><html lang="en"><body><script> // Boolean object treated like an object. var booleanObject = new Boolean(0); console.log(booleanObject.toString()); // Logs 'false'. console.log(booleanObject['toString']()); // Logs 'false'. // Boolean literal/primitive converted to an object when treated as an object. var booleanLiteral = false; console.log(booleanLiteral.toString()); // Logs 'false'. console.log(booleanLiteral['toString']()); // Logs 'false'. console.log((true).toString()); // Logs 'true'. console.log(true['toString']()); // Logs 'true'. </script></body></html>
直接存取原始數字的屬性(不儲存在變數中)時,必須先計算該數字,然後才能將該值視為物件(例如, (1).toString();
或1..toString();
)。為什麼是兩個點?第一個點被視為數字小數,而不是用於存取物件屬性的運算子。
表示字串、數字或布林值的文字/原始值的書寫速度更快,而且文字形式更簡潔。
因此,您應該使用文字值。此外, typeof
運算子的準確性取決於您建立值的方式(文字與建構函式呼叫)。如果您建立字串、數字或布林對象,則 typeof
運算子會將類型報告為物件。如果您使用文字,則 typeof
運算子將傳回實際值類型的字串名稱(例如,typeof 'foo' // returns 'string'
)。
我在下面的程式碼中演示了這一事實。
範例:sample59.html
<!DOCTYPE html><html lang="en"><body><script> // String, number, and Boolean objects. console.log(typeof new String('foo')); // Logs 'object'. console.log(typeof new Number(1)); // Logs 'object'. console.log(typeof new Boolean(true)); // Logs 'object'. // String, number, and Boolean literals/primitives. console.log(typeof 'foo'); // Logs 'string'. console.log(typeof 1); // Logs 'number'. console.log(typeof true); // Logs 'boolean'. </script></body></html>
如果您的程式依賴typeof
運算子來根據這些基本類型識別字串、數字或布林值,則應避免使用String
、Number
和Boolean
建構子。
以上是使用基本字串、數字和布林值的詳細內容。更多資訊請關注PHP中文網其他相關文章!