這是我參與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