IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Es6知识回顾② -> 正文阅读

[JavaScript知识库]Es6知识回顾②

7.箭头函数

1.Es6中允许使用箭头(=>)定义函数,称之为箭头函数

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

2.箭头函数的简写:

1.如果箭头函数的参数只有一个的时候可以省略小括号。

var f = v => v;
等同于

var f = function(v) {
  return v;
};

2.如果箭头函数的函数体只有一条返回语句时,可以省略花括号,可以省略return关键字。

var f = () => 5;
// 等同于

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

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

3.如果返回值是一个对象的时候,就会吧对象的花括号认为时函数体的花括号,把返回值变成表达式的形式。

var getTempItem = id => ({ id: id, name: "Temp" });

3.箭头函数使用场景

1.临时使用的函数。并不会刻意的调用,比如异步的处理函数,事件的处理函数。
2.需要沿用外层this。
3.对象的属性不用箭头函数,除非有特别需求。
4.数组的方法时为了保证代码的简洁性可以使用。
5.适用于不需要使用函数名时调用

4.箭头函数的注意点

1.箭头函数中没有 this,argument,new.target,如果非要使用,则指向外层函数对应的this,argument,new.target.(箭头函数的this指向箭头函数定义时所处的对象,而不是箭头函数使用时所在的对象,默认使用父级的this.)
2.箭头函数没有原型,所以说占用内存空间非常小,不能当成构造函数来使用。

8.symbol(符号)

ES6新增一种普通数据类型为符号Symbol

作用:符号的设计是给对象添加私有属性,只能在对象内部进行方法。
特点:

  1. 没有字面量的创建方式,只有Symbol()创建。
var s1 = Symbol('foo');
var s2 = Symbol('bar');
s1 // Symbol(foo)
s2 // Symbol(bar)
  1. 新增的数据类型,typeof返回为symbol。
console.log(typeof Symbol('foo'))//'Symbol'
  1. 每次调用Symbol函数得到的符号永远不会想到,不管有没有符描述和符号描述号是否相同.
let syb1 = Symbol()
let syb2 = Symbol()
console.log(syb1 == syb2)//false
  1. 符号可以作为对象的属性名使用,这种属性名叫做符号属性.
 const syb1 = Symbol("b");
 const obj = {
            a: 1,
            [syb1]: 2 //符号属性
 }
 console.log(obj)//a:1,[Symbol(b)]:2;
  1. 由Symbol值作为的键名(符号属性), 不会被常规方法所遍历。
  2. fon…in/for…of/Object.keys()/Object.getOwnPropretyNames()/JSON.stringify().
   const syb1 = Symbol("abc")
   const obj = {
             a : 1,
             [syb1] : 2
   };
   console.log(obj[syb1])
   for (const key in obj) {
        console.log(key)
   }
   console.log(Object.keys(obj))
   console.log(Object.getOwnPropertyNames(obj))

   //针对符号属性的遍历获取:getOwnPropertySymbols()  返回为一个数组
   console.log(Object.getOwnPropertySymbols(obj))

  //一个新的对象上的API, Reflect.ownKeys()方法可以返回所有类型的键名,包括普通键名和Symbol键名
  console.log(Reflect.ownKeys(obj))

  1. 符号类型无法被隐式转换,数学运算,字符串拼接.
const syb = Symbol("my symbol")
            // console.log(syb + 10)
            // 但是可以显示转换为字符串
console.log(String(syb))
syb.toString()
            // symbol可以转换为bool值但是不能转换成数值
Boolean(syb)

共享符号和知名符号 :

1.Symbol.for(“符号描述”),如果符号描述相等,则可以得到同一个符号。

 const syb1 = Symbol.for("abc")
 const syb2 = Symbol.for("abc")
 console.log(syb1,syb2)
 console.log(syb1 === syb2)//true

2.知名符号:有特殊含义的符号,配置底层

1. Symbol.hasInstance  影响instanceof运算符的结果。
      function A() {}
        Object.defineProperty(A, Symbol.hasInstance, {
            value: function(v) {
                console.log(v)
                return false
            }
        })
        const a = new A()
        console.log(a instanceof A)
        
2. Symbol.isConcatSpreadable 会对数组concat方法产生影响。
        const arr =[3]
        const arr2 = [4,5,6,7];
        arr2[Symbol.isConcatSpreadable] = false;
        const result = arr.concat(99,arr2)
        console.log(result)


        const arr = [1]
        const obj = {
            0 : 3,
            1 : 5,
            length : 2,
            [Symbol.isConcatSpreadable] : true
        }
        const result = arr.concat(99,obj)
        console.log(result)

3. Symbol.toPrimitive 对数据类型的转换产生影响。
        const obj = {
            a : 1,
            b : 2
        }
        obj[Symbol.toPrimitive] = function(){
            return 123
        }
        console.log(obj + 123)

4.Symbol.toStringTag 可以影响Object.prototype.toString的返回值。
        class Person {
            [Symbol.toStringTag] = "Person"
        }
        const p = new Person()
        console.log(p)
        console.log(Object.prototype.toString.call(p))
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 10:51:58  更:2021-10-22 10:53:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:16:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码