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
本文深入探讨了ES6中新增的Symbol数据类型及其特性,包括唯一性、不可枚举性和作为属性名的应用。同时,文章还详细介绍了箭头函数的语法糖和使用技巧,如参数和函数体的简化写法。
722

被折叠的 条评论
为什么被折叠?



