这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战前端
ECMAScript 提供了 3 中特殊的引用类型:Boolean
、Number
和String
,方便操做原始值。咱们先来看一个例子:web
let my = "Sam";
let you = my.substring(2)
console.log(you); // "m"
复制代码
这里建立了一个原始值字符串 my,紧接着调用substring()
方法,并将结果保存至 you 中。但原始值并非对象,substring 方法是从哪来的? 其实是由于后台作了处理,从而实现了上述操做,具体来讲,当第二行访问 my 的时候,是以只读模式访问的,后台会执行如下三个步骤: 一、建立一个 String 类型的实例 二、调用实例上的特定方法 三、销毁实例 至关于执行了如下代码:markdown
let my = new String("Sam");
let you = my.substring(2);
my = null;
复制代码
对于 Boolean 和 Number 也同样,以上三步也会在后台执行,只不过使用的是 Boolean 和 Number 的包装类型。函数
Boolean 是对应布尔值的引用类型。要建立一个Boolean对象,就使用Boolean构造函数并传入true 或 false,以下例所示:post
let booleanObject = new Boolean(true);
复制代码
Boolean 的实例会重写 valueOf()
方法,返回一个原始值 true 或 false。toString()
方法被调用时也会被覆盖,返回字符串"true"或"false"。不过,Boolean 对象在 ECMAScript 中用得不多。不只如此,它们还容易引发误会,尤为是在布尔表达式中使用Boolean对象时,好比:网站
let falseObject = new Boolean(false);
let result = falseObject && true;
console.log(result); // true
let falseValue = false;
result = falseValue && true;
console.log(result); // false
复制代码
在这段代码中,咱们建立一个值为 false 的 Boolean对象。而后,在一个布尔表达式中经过 && 操做将这个对象与一个原始值true组合起来。在布尔算术中,false && true 等于 false。但是,这个表达式是对 falseObject 对象而不是对它表示的值(false)求值。前面刚刚说过,全部对象在布尔表达式中都会自动转换为 true,所以falseObject在这个表达式里实际上表示一个 true 值。那么 true && true 固然是 true。 除此以外,原始值和引用值(Boolean对象)还有几个区别。首先,typeof操做符对原始值返回"boolean",但对引用值返回"object"。一样,Boolean 对象是 Boolean类型的实例,在使用instaceof操做符时返回true,但对原始值则返回false,示例:ui
console.log(typeof falseObject); // object
console.log(typeof falseValue); // boolea
nconsole.log(falseObject instanceof Boolean); // true
console.log(falseValue instanceof Boolean); // false
复制代码
理解原始布尔值和Boolean对象之间的区别很是重要,强烈建议永远不要使用后者。url
写做不易,但愿能够得到你的一个「赞」。若是文章对你有用,能够选择「收藏」。 若有文章有错误或建议,欢迎评论指正,谢谢你。❤️spa