symbol和箭头函数

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 = new Symbol("a");//报错Symbol is not a constructor 

5 symbol可以作为属性名
由于每个symbol的值都是不相等的 用于对象的属性名,就能保证不出现同名的的属性

 var aaa = Symbol("a");
    var bbb = Symbol("b")
    let a = {
        [aaa]: 1,
        [bbb]: 2
    }
    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 = {
        [aaa]: 1,
        [bbb]: 2
    }
    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

2箭头函数

s6是允许使用箭头函数的

​ 只有一个参数并且函数体只有一句话就可以省略()返回值可以省略 函数体省略大括号

 var fn = n => 123;

    function fn(n) {
        return 123;
        console.log(123);

    }
    var r = fn();
    console.log(r);

2 箭头函数没有参数 或者有多个参数 那么参数中的()就不能省略

var f = () => 5;
// 等同于
var f = function () { return 5 };

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
  return num1 + num2;
};

3如果箭头函数的函数体有多条代码 那么就不能省略{} 以及返回值也不能省略return

var sum = (num1, num2) => { return num1 + num2; }

4 如果函数体只有一句话 并且返回值是对象 那么这个返回值必须使用()包起来

因为 函数体使用的是{} 对象也是{}

// 报错
let getTempItem = id => { id: id, name: "Temp" };

// 不报错
let getTempItem = id => ({ id: id, name: "Temp" });

5如果对象只有一个键值对,那么就不会报错 但是也没有正确的值

​ 因为js引擎在解析的时候 {} 默认解析为函数体结构 函数体代码 name : name;

var info = (name, age) => ({
        name: name,
        age: age
    })
    console.log(info("箩筐", 16)); //{name: "箩筐", age: 16}

var p = (name) => {
        name: name;
    }
    console.log(p("lili"))//不报错 但是会打印undefined
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页