symbol和箭頭函式

2021-10-08 08:00:14 字數 3483 閱讀 6994

symbol是es6新引入的一種基本資料的值 是一種獨一無二的值

他是js裡面的第七種型別 es6資料型別有 number,string,boolean,object,null,undefined ,symbol

1,symbol 函式不能用new命令 因為symbol是原始資料型別,不是物件。可以接受乙個字串作為引數,為新建的symbol提供描述,這樣有利於區分

console.

log(

symbol()

===symbol()

)//false

console.

log(

symbol

("aa"

)===

symbol

("aa"))

//false

因為symbol具有唯一性 就算引數一樣 表示的值也不一樣

2,symbol沒有字面量寫法

3他是一種新增的資料型別 使用typeof檢測是symbol

var a =

symbol

("a");

console.

log(

typeof

(a))

//undefined

4 symbol 不能用new關鍵字來建立

var s =

newsymbol

("a");

//報錯symbol is not a constructor

5 symbol可以作為屬性名

由於每個symbol的值都是不相等的 用於物件的屬性名,就能保證不出現同名的的屬性

var aaa =

symbol

("a");

var bbb =

symbol

("b"

)let a =

console.

log(a)

//symbol(a): 1

// symbol(b): 2

6symbol作為屬性名的遍歷

symbol作為屬性名的時候,用for…in,和for…of不能遍歷用object.getownpropertysymbols()方法 可以獲取所有的symbol屬性名,這個方法返回的是又symbol物件的陣列

var aaa =

symbol

("a");

var bbb =

symbol

("b"

)let a =

console.

log(object.

getownpropertysymbols

(a))

//[symbol(a), symbol(b)]

7symbol.for

這個方法引數是乙個字串 如果有這個值 那麼將這個值返回 如果沒有 就建立乙個數值 在全域性作用域內新增

var s1 = symbol.

for(

"aaa");

console.

log(s1)

;var s2 = symbol.

for(

"aaa");

console.

log(s2)

; console.

log(s1 == s2)

//true

8symbol.keyfor

這個方法返回的是已經在全域性作用域登記的symbol值得標記引數,如果沒有登記,就返回undefined

symbol.for()symbol()這兩種寫法,都會生成新的 symbol。它們的區別是,前者會被登記在全域性環境中供搜尋,後者不會。

var syb1 = symbol.

for(

"sss");

console.

log(symbol.

keyfor

(syb1));

//true 這個

var syb2 =

symbol

("sss");

console.

log(symbol.

keyfor

(syb2));

//false

s6是允許使用箭頭函式的

​ 只有乙個引數並且函式體只有一句話就可以省略()返回值可以省略 函式體省略大括號

var

fn= n =>

123;

function

fn(n)

var r =fn(

);console.

log(r)

;

2 箭頭函式沒有引數 或者有多個引數 那麼引數中的()就不能省略

varf=

()=>5;

// 等同於

varf

=function()

;var

sum=

(num1, num2)

=> num1 + num2;

// 等同於

varsum

=function

(num1, num2)

;

3如果箭頭函式的函式體有多條** 那麼就不能省略{} 以及返回值也不能省略return

var

sum=

(num1, num2)

=>

4 如果函式體只有一句話 並且返回值是物件 那麼這個返回值必須使用()包起來

因為 函式體使用的是{} 物件也是{}

// 報錯

letgettempitem

= id =>

;// 不報錯

letgettempitem

= id =>()

;

5如果物件只有乙個鍵值對,那麼就不會報錯 但是也沒有正確的值

​ 因為js引擎在解析的時候 {} 預設解析為函式體結構 函式體** name : name;

var

info

=(name, age)

=>()

console.

log(

info

("籮筐",16

));//

varp

=(name)

=>

console.

log(p(

"lili"))

//不報錯 但是會列印undefined

箭頭函式和this

箭頭函式 es6新增了乙個使用箭頭符號 定義函式的語法特性 函式 let f function 箭頭函式語法 let f li let f function name 箭頭函式語法 let f 引數 返回值 let f name name let f let f x,y console.log f ...

箭頭箭頭函式

var fn function a 一樣 jineng function 箭頭函式外面指向誰就指向誰 有function.console.log fn3 1 像函式表示式 this指向不變.不能作為建構函式 不能使用new 返回物件的話.外部用括號 var fn7 name asdfnasd age...

js 箭頭函式和this

要討論this,就一定要與函式一起討論。普通函式中,this所表示的意義與他所處的環境有關。環境屬於誰,this就指代誰。觀察列印結果,你會發現this.age沒有值,列印結果是nan,表示沒有age的值不是乙個number型別,無法自增加一。function person 1000 var o n...