使用基本字符串、數字和布爾值

使用基本字符串、數字和布爾值

不要對字符串、數字和布爾文字可以被視為具有屬性的對象這一事實感到困惑(例如,true.toString())。當這些基元值通過嘗試訪問其屬性而被視為對象時,JavaScript 將從基元的關聯構造函數創建一個包裝器對象,以便可以訪問包裝器對象的屬性和方法。

一旦訪問了屬性,包裝器對象就會被丟棄。這種轉換允許我們編寫代碼,使其看起來好像原始值實際上是一個對象。說實話,當它在代碼中被視為對象時,JavaScript 會將其轉換為對象,以便屬性訪問可以工作,然后在返回值后將其轉換回原始值。這里需要注意的關鍵是正在發生的事情,而 JavaScript 正在幕后為您做這件事。


原始值樣本

這里有一些示例來演示我正在談論的內容:

字符串示例:sample56.html

 <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>

數字示例:sample57.html

 <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>

布爾示例:sample58.html

 <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>

直接訪問原始數字的屬性(不存儲在變量中)時,必須先計算該數字,然后才能將該值視為對象(例如, (1).toString(); 或1..toString();)。為什么是兩個點?第一個點被視為數字小數,而不是用于訪問對象屬性的運算符。


您通常應該使用原始字符串、數字和布爾值

表示字符串、數字或布爾值的文字/原始值的書寫速度更快,并且文字形式更簡潔。

因此,您應該使用文字值。此外, typeof 運算符的準確性取決于您創建值的方式(文字與構造函數調用)。如果您創建字符串、數字或布爾對象,則 typeof 運算符會將類型報告為對象。如果您使用文字,則 typeof 運算符將返回實際值類型的字符串名稱(例如,typeof ‘foo’ // returns ‘string’)。

我在下面的代碼中演示了這一事實。

示例:sample59.html

 <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>

結論

如果您的程序依賴 typeof 運算符來根據這些基本類型識別字符串、數字或布爾值,則應避免使用 String、Number 和 Boolean 構造函數。

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享