symbol
(符號)是
ecmascript 6
新增的資料型別。符號是原始值,且符號例項是唯
一、不可變的。 符號的用途是確保物件屬性使用唯一識別符號,不會發生屬性衝突的危險。
儘管聽起來跟私有屬性有點類似,但符號並不是為了提供私有屬性的行為才增加的(尤其是因為 object api 提供了方法,可以更方便地發現符號屬性)。相反,符號就是用來建立唯一記號,進而用作非字串形式的物件屬性。
// 建立全域性符號
let s = symbol.for('foo');
console.log(symbol.keyfor(s)); // foo
// 建立普通符號
let s2 = symbol('bar');
console.log(symbol.keyfor(s2)); // undefined
如果傳給 symbol.keyfor()的不是符號,則該方法丟擲 typeerror:
symbol.keyfor(123); // typeerror: 123 is not a symbol
包括 a++ ,a-- ,++a, --a ,四個操作符。
字尾版與字首版的主要區別在於,字尾版遞增和遞減在語句被求值後才發生。
這 4
個操作符可以作用於任何值,意思是不限於整數
——字串、布林值、浮點值,甚至物件都可
以。遞增和遞減操作符遵循如下規則。
let s1 = "2";
let s2 = "z";
let b = false;
let f = 1.1;
let o =
}; s1++; // 值變成數值 3
s2++; // 值變成 nan
b++; // 值變成數值 1
f--; // 值變成 0.10000000000000009(因為浮點數不精確)
o--; // 值變成-2
一元加和減操作符
對大多數開發者來說並不陌生,它們在
ecmascript
中跟在高中數學中的用途一 樣。一元加由乙個加號(+
)表示,放在變數前頭,對數值沒有任何影響:
let num = 25;
num = +num;
console.log(num); // 25
如果將一元
加應用到非數值,則會執行與使用
number()
轉型函式一樣的型別轉換:布林值
false 和 true
轉換為
0 和
1,字串根據特殊規則進行解析,物件會呼叫它們的
valueof()和/
或 tostring() 方法以得到可以轉換的值。下面的例子演示了一元加在應用到不同資料型別時的行為:
let s1 = "01";
let s2 = "1.1";
let s3 = "z";
let b = false;
let f = 1.1;
let o =
}; s1 = +s1; // 值變成數值 1
s2 = +s2; // 值變成數值 1.1
s3 = +s3; // 值變成 nan
b = +b; // 值變成數值 0
f = +f; // 不變,還是 1.1
o = +o; // 值變成數值-1
對數值使用一元減會將其變成相應的負值(如上面的例子所示)。在應用到非數值時,一元減會遵循與一元加同樣的規則,先對它們進行轉換,然後再取負值:
let s1 = "01";
let s2 = "1.1";
let s3 = "z";
let b = false;
let f = 1.1;
let o =
}; s1 = -s1; // 值變成數值-1
s2 = -s2; // 值變成數值-1.1
s3 = -s3; // 值變成 nan
b = -b; // 值變成數值 0
f = -f; // 變成-1.1
o = -o; // 值變成數值 1
一元加和減操作符主要用於基本的算術,但也可以像上面的例子那樣,用於資料型別轉換。主要用於基本運算,但也可以用來資料型別的轉換。
按位非操作符用波浪符(
~)表示,它的作用是返回數值的一補數。按位非是
ecmascript
中為數 不多的幾個二進位制數學操作符之一。
let num1 = 25; // 二進位制 00000000000000000000000000011001
let num2 = ~num1; // 二進位制 11111111111111111111111111100110
console.log(num2); // -26
這裡,按位非操作符作用到了數值
25,得到的結果是26
。由此可以看出,按位非的最終效果是對 數值取反並減 1
,就像執行如下操作的結果一樣:
let num1 = 25;
let num2 = -num1 - 1;
console.log(num2); // "-26"
實際上,儘管兩者返回的結果一樣,但
位操作的速度快得多
。這是因為位操作是在數值的底層表示 上完成的。
~符號的表示意思就是 ~x = -x - 1;
ES6 Symbol資料型別
基本的資料型別 null undefined number boolean string symbol 引用資料型別 object let s1 symbol let s2 symbol console.log typeof s1 symbol console.log s1 s2 false1 sy...
ES6 symbol 以及symbol的簡單應用
1.es6 引入了一種新的原始資料型別symbol,表示獨一無二的值。2.symbol 值通過symbol函式生成。3.symbol 函式可以接受乙個字串作為引數,表示對 symbol 例項的描述,主要是為了在控制台顯示,或者轉為字串時,比較容易區分。4.es2019 提供了乙個例項屬性descri...
ES6 Symbol基本用法詳解
大家都知道,es5的物件的屬性名都是字串,這樣就很容易造成屬性名衝突,從而替代了原有物件的方法,於是,es6就提供了symbol,表示獨一無二的值,它是一種新的原始資料型別,symbol型別。注意哦!symbol是基本資料型別,所以不能使用new命令,否則會報錯。let s1 symbol 1,2 ...