【ES6学习笔记】-----箭头函数与symbol

【ES6学习笔记】—–箭头函数与symbol

一.箭头函数
我们在ES6以前写函数使用function这个关键字。 但是字ES6中出现了 =>, 有点像lambda表达式的感觉。这是ES6编写函数的新语法。
它使我们的代码变得更加简洁。比如我们在ES5可能会写如下代码

var overArr = mobileArr.map(function(dir){
    return dir.ifselected();
});

使用箭头函数则可以这么写

//ES6
var overArr = mobileArr.map(dir => dir.ifselected());

有意思吧~~~
那么如果有函数有两个参数呢?不多说看代码啦

//ES6
var overArr = mobileArr.map((boy, girl) => boy + girl);

那如果函数块里不止一行代码呢?

var overArr = mobileArr.map((boy, girl) => {
   if(boy.name == girl.name){
    return true;   
   }
   else  return false;
});

对啊就是这么简单,增加一个函数块就行了。
注意:如果只有一个语句那么是不用加函数块的,而且会默认返回这个语句执行后的值;但是如果有多个语句,就必须写函数块,并且默认返回值也就没有了,要返回必须手动返回

还有一点需要注意:我们看下面这个代码示例

 var chewToys = puppies.map(puppy => {}); // 这样写会报 Bug!
 var chewToys = puppies.map(puppy => ({})); 

如果你要返回一个对象!!而且只有一个语句,那么必须给这个对象加上括号!!!
因为 {} 你的意思可能是返回一个空对象,但是会和函数块的花括号混淆~所以必须加上括号~代表你返回的是一个对象而不是要写一个函数块~

我们说了这么多如何使用箭头函数,那么我们来讨论一下箭头函数的this吧!
开门见山! 箭头函数没有自己的this,箭头函数的this继承自外围作用域
见如下代码!

    var tryHandle = {
        ruihaoName : 'ruihaolee',
        tryHandleFun : function(){
            var ceshiArr = ['web', 'android', 'ios', 'windows'];
            ceshiArr.map(() => {
                console.log(this.ruihaoName);
            });
        }
    }
    tryHandle.tryHandleFun();

最后控制台会输出 ‘ruihaolee’
在ES5中如果我们使用function去写会报错的。因为ES5function中的this并没有ruihaoName。
我们使用箭头函数后,this继承外围作用域,外围作用域的this是tryHandle。所以this.ruihaoName当然也会输出!!!
好了箭头函数就总结到这里吧~~


二.来谈谈symbol吧!
我们先说说ES6之前的JS有几种数据类型吧!
1.Undefined 未定义
2.Null 空值
3.Boolean 布尔类型
4.Number 数字类型
5.String 字符串类型
6.Object 对象类型
没错。symbol是ES6中的一种全新类型!
ES6 新特性中的 symbol 也是值,但它不是字符串,也不是对象,而是是全新的——第七种类型的原始值
它有什么用呢? 你在使用库或者作为一个库的开发者,你必须非常小心的给大家都可以访问到的对象添加属性,如果同名属性就会覆盖,造成不知名的bug。让Symbol来拯救你吧!

var mySymbol = Symbol();
obj[mySymbol] = 'ruihaolee';//保证不会冲突
console.log(obj[mySymbol]);

到底什么是Symbol?

 > typeof Symbol()
 "symbol"

确切地说,symbol 与其它类型并不完全相像。
symbol 被创建后就不可变更,你不能为它设置属性(在严格模式下尝试设置属性
会得到 TypeError 的错误)。他们可以用作属性名称,这些性质与字符串类似。
另一方面,每一个 symbol 都独一无二,不与其它 symbol 等同,即使二者有相同的
描述也不相等;你可以轻松地创建一个新的 symbol。这些性质与对象类似。

获取Symbol的三种方法:
调用 Symbol()。正如我们上文中所讨论的,这种方式每次调用都会返回一个新的
唯一 symbol。
调用 Symbol.for(string)。这种方式会访问 symbol 注册表,其中存储了已经存在
的一系列 symbol。这种方式与通过 Symbol()定义的独立 symbol 不同,symbol 注册表
中的 symbol 是共享的。如果你连续三十次调用 Symbol.for(“cat”),每次都会返回相
同的 symbol。注册表非常有用,在多个 web 页面或同一个 web 页面的多个模块中经常
需要共享一个 symbol。
使用标准定义的 symbol,例如:Symbol.iterator。标准根据一些特殊用途定义
了少许的几个 symbol。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值