ES6-function

函数的扩展

  1. 函数参数的默认值。
function log(x, y = 'World') {
  console.log(x, y);
}
  • 1)允许为函数的参数设置默认值,即直接写在参数定义后面
  • 2)即当参数值严格等于undefined时,默认值才会生效
  • 3)参数默认值不是传值的,而是每次都重新计算默认值表达式的值
  • 4)参数默认值与解构赋值的默认值结合使用
  1. 函数的length属性
  • 等于实参的长度
  • 没有默认值,等于形参的长度 ,有默认值 等于默认值的位置
  1. 作用域问题
  • 形参所在的小括号是一个单独的作用域,遇到变量来 先看自己的作用域下有没有 没有再往上找
  1. 扩展运算符
  • 可以将数组变成非数组,也可以将非数组变成数组:let ary = [1,2,3] console.log(…ary)
  • 将字符转变成数组:let str = “12345” console.log([…str])
  • 将类数组变成数组:
function fn3(){
    return [...arguments].sort();
    }
console.log(fn3(3,2,1,4,6))
  • 应用:求出最大值,拼接数组
let arr1 = [1,2,3,34,56,78]  //求出最大值
console.log(eval("Math.max("+ arr1 +")"))
console.log(Math.max.apply(null,arr1));
console.log(Math.max(...arr1))

let a1 = [1,2],a2 = [3,4]  //拼接数组
console.log(a1.concat(a2));
console.log([...a1,...a2])
  1. 函数name属性
  • 函数的name属性,返回该函数的函数名,bind返回的函数,name属性值会加上bound前缀。
let fn4 = function(){
    console.log(this)
}
//bind
let obj = {};
var ff = fn4.bind(obj)
ff();
console.log(ff.name) //bound fn4
//new
let f = new Function ("n","return n");
console.log(f.name)  //anonymous
  1. 箭头函数
  • 箭头函数没有this指向,它里面的this是谁,看上一级作用域中的this
var f =() =>5 //等同于
var f = function(){return 5}

var sun = (sum1 , sum2 ) => {sun1 + sum2} //等同于
var sun = function(sun1,sun2){return (sun1+sun2)}
  • 若箭头函数要返回一个对象,必须在对象外面加上大括号,否则会报错
let getTempItem = id => ({ id: id, name: "Temp" });

对象的扩展

  1. 属性简写
function getPoint() {
    const x = 1;
    const y = 10;
    console.log({x, y}) ; //{x: 1, y: 10}
}
getPoint()
  1. 属性遍历
  • for…in
var obj = {a:1, b:2, c:3};  
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
  • Object.keys(obj) 返回一个所有元素为字符串的数组
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']
  • Object.getOwnPropertyNames()
 var arr = ["a", "b", "c"];
console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"]
  1. super属性
  • super,指向当前对象的原型对象。
const proto = {
foo: 'hello'
};
const obj1 = {
foo: 'world',
find() {
    return super.foo;
}
};
Object.setPrototypeOf(obj1, proto); //将一个指定的对象的原型设置为另一个对象
console.log(obj1.find() )  //super,指向当前对象的原型对象。
  1. 对象的扩展运算符
let { p1, p2, ...p3 } ={ p1: 1, p2: 2, p3: 3, p4: 4 };
console.log(p1, p2, p3) // 1 2 {p3: 3, p4: 4}

对象的新增方法

  1. object.assign()

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)(浅拷贝)

const target  = {a:1};
const source1 = {b:2};
const source2 = {c:3};
Object.assign(target,source1,source2) 
console.log(target) //Object {a:1,b:2,c:3}
  • 有多个原对象同名属性,后面的属性会覆盖前面的属性
 const target1 = { a: 1, b: 1 };
const source11 = { b: 2, c: 2 };
const source21 = { c: 3 };
Object.assign(target1, source11, source21);
console.log(target1)// {a:1, b:2, c:3}
  • 除了字符串会以数组形式,拷贝入目标对象,其他值都不会产生效果。
const v1 = 'abc';
const v2 = true;
const v3 = 10;
const obj = Object.assign({}, v1, v2, v3);
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
  • 浅拷贝性质
const obj1 = {a: {b: 1}};
const obj2 = Object.assign({}, obj1);
obj1.a.b = 2;
console.log( obj2.a.b) //2

Symbol

  1. 凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
  • 创建Symbol
let firstName1 = Symbol();
let person1 = {};
person1[firstName1] = "liaomei";
console.log(person1[firstName1]); // "liaomei"
  • symbol.for()

使用Symbol.for()方法也可以创建一个Symbol类型的值,但是此方法和Symbol()的一个重要区别是,
它不会重复创建具有相同键的值,也就是说此方法在创建一个值之前,
首先会搜索是否已经具有指定键的Symbol类型的值,如果有则返回这个Symbol值,否则新创建一个Symbol值。

let one = Symbol.for("哈哈哈哈");
let two = Symbol.for("哈哈哈哈");
console.log(typeof one);  //symbol
console.log(one == two);  //true
  • Symbol.keyFor()

此方法会获取对应Symbol值的键。

let s = Symbol.for("嘻嘻嘻嘻");
console.log(Symbol.keyFor(s));  //嘻嘻嘻嘻
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值