Rumah  >  Artikel  >  Tutorial CMS  >  Gunakan rentetan asas, nombor dan nilai Boolean

Gunakan rentetan asas, nombor dan nilai Boolean

PHPz
PHPzasal
2023-08-29 18:25:021065semak imbas

Gunakan rentetan asas, nombor dan nilai Boolean

Jangan keliru dengan fakta bahawa rentetan, nombor dan literal Boolean boleh dianggap sebagai objek dengan sifat (cth., true.toString()). Apabila nilai primitif ini dianggap sebagai objek dengan cuba mengakses sifatnya, JavaScript akan mencipta objek pembungkus daripada pembina berkaitan primitif supaya sifat dan kaedah objek pembungkus boleh diakses. 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 运算符来根据这些基本类型识别字符串、数字或布尔值,则应避免使用 StringNumberBoolean

🎜 🎜Setelah harta itu diakses, objek pembalut dibuang. Penukaran ini membolehkan kami menulis kod yang kelihatan seolah-olah nilai asal sebenarnya objek. Sejujurnya, apabila ia dianggap sebagai objek dalam kod, JavaScript menukarnya kepada objek supaya akses harta boleh berfungsi, dan kemudian menukarnya kembali kepada nilai asal selepas mengembalikan nilai. Perkara utama yang perlu diperhatikan di sini ialah perkara yang berlaku, dan JavaScript melakukannya untuk anda di belakang tabir. 🎜

Sampel nilai asal

🎜Berikut ialah beberapa contoh untuk menunjukkan perkara yang saya perkatakan: 🎜 🎜Contoh rentetan: sample56.html🎜 rrreee 🎜Contoh berangka: sample57.html🎜 rrreee 🎜Contoh Boolean: sample58.html🎜 rrreee 🎜Apabila mengakses terus sifat nombor mentah (tidak disimpan dalam pembolehubah), nombor mesti dikira sebelum nilai boleh dianggap sebagai objek (contohnya, (1).toString(); atau 1..toString();). Mengapa dua mata? Titik pertama dianggap sebagai perpuluhan berangka, bukan pengendali yang digunakan untuk mengakses sifat objek. 🎜

Anda seharusnya menggunakan rentetan mentah, nombor dan boolean

🎜Nilai literal/mentah yang mewakili rentetan, nombor atau nilai Boolean ditulis lebih cepat dan dalam bentuk literal yang lebih ringkas. 🎜 🎜Oleh itu, anda harus menggunakan nilai literal. Selain itu, ketepatan pengendali typeof bergantung pada cara anda mencipta nilai (panggilan literal lwn. pembina). Jika anda mencipta rentetan, nombor atau objek Boolean, pengendali typeof melaporkan jenis sebagai objek. Jika anda menggunakan literal, operator typeof mengembalikan nama rentetan jenis nilai sebenar (contohnya, typeof 'foo' // mengembalikan 'string'). 🎜 🎜Saya menunjukkan fakta ini dalam kod di bawah. 🎜 🎜Contoh: sample59.html🎜 rrreee

Kesimpulan

🎜Jika program anda bergantung pada operator typeof untuk mengenal pasti rentetan, nombor atau nilai Boolean berdasarkan jenis asas ini, anda harus mengelak daripada menggunakan String, Number dan Boolean pembina. 🎜

Atas ialah kandungan terperinci Gunakan rentetan asas, nombor dan nilai Boolean. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn