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
运算符来根据这些基本类型识别字符串、数字或布尔值,则应避免使用 String
、Number
和 Boolean
(1).toString();
atau 1..toString();). Mengapa dua mata? Titik pertama dianggap sebagai perpuluhan berangka, bukan pengendali yang digunakan untuk mengakses sifat objek. 🎜
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
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!