
不要对字符串、数字和布尔文字可以被视为具有属性的对象这一事实感到困惑(例如,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
Perl学习手札是台湾perl高手写的一篇文章,特打包为chm版,方便大家阅读。 关于本书 1. 关于Perl 1.1 Perl的历史 1.2 Perl的概念 1.3 特色 1.4 使用Perl的环境 1.5 开始使用 Perl 1.6 你的第一个Perl程序 2. 标量变量(Scalar) 2.1 关于标量 2.1.1 数值 2.1.2 字符串 2.1.3 数字与字符串转换 2.2 使用你自己的变量 2.3 赋值 2.3.1 直接设定 2.3.2 还可以这样 2.4 运算 2.5 变量的输出/输入 2.
0
<!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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号