美文网首页
函数的参数,,扩展运算符,rest参数箭头函数,对象的拓展

函数的参数,,扩展运算符,rest参数箭头函数,对象的拓展

作者: 我家有个王胖胖 | 来源:发表于2022-03-05 19:51 被阅读0次

一.函数的参数
1.默认值

//当不传y的时候默认为world
function foo(x,y){
    y = y || 'world' 
    console(x+y)
}
foo('hello')//helloworld
//但是这种方式不严谨,当y传0时呢?我们期待的是hello0
foo('hello',0)//结果是helloworld
//es6中我们可以这样处理
function foo(x,y = 'world'){
    y = y || 'world' 
    console(x+y)
}

默认参数的位置:

function foo(x,z,y=5) {
    console.log(x,y,z);
    
}
foo(1,2,3);//1,3,2

1.2.与解构配合使用

function foo({x, y = 5}) {
  console.log(x, y);
}

foo({}) // undefined 5
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2
foo() // TypeError: Cannot read property 'x' of undefined

1.3.length属性:没有指定默认值的参数的个数
1.4作用域

let x = 1;
function foo(x,y=x){
    console.log(x,y);
}
foo(2)//2 2
--------------------------
let x = 1;
function foo(y=x){
    let x = 2;
    console.log(x,y);
}
foo()//2 1

1.5name属性

函数的name属性,返回该函数的函数名。
function foo() {}
foo.name // "foo"
这个属性早就被浏览器广泛支持,但是直到 ES6,才将其写入了标准。
需要注意的是,ES6 对这个属性的行为做出了一些修改。
如果将一个匿名函数赋值给一个变量,
ES5 的name属性,会返回空字符串,而 ES6 的name属性会返回实际的函数名。
var f = function () {};
// ES5
f.name // ""
// ES6
f.name // "f"
上面代码中,变量f等于一个匿名函数,
ES5 和 ES6 的name属性返回的值不一样。
如果将一个具名函数赋值给一个变量,
则 ES5 和 ES6 的name属性都返回这个具名函数原本的名字。
const bar = function baz() {};
// ES5
bar.name // "baz"
// ES6
bar.name // "baz"
Function构造函数返回的函数实例,name属性的值为anonymous。
(new Function).name // "anonymous"
bind返回的函数,name属性值会加上bound前缀。
function foo() {};
foo.bind({}).name // "bound foo"
(function(){}).bind({}).name // "bound "

二:扩展运算符和rest参数
2.1扩展运算符:把数组或者类数组展开成逗号隔开的值

//展开数组
let arr1 = [1, 2, 3]
console.log(...arr1);
let arr2 = [4, 5, 6]
//合并数组
//Array.prototype.push.apply(arr1,arr2)//es5写法
arr1.push(...arr2)
console.log(arr1);

2.2 rest参数,把逗号隔开的值合并成一个数组
代替arguments

// arguments变量的写法
function sortNumbers() {
  return Array.from(arguments).sort();
}

// rest参数的写法
const sortNumbers = (...numbers) => numbers.sort();

sortNumbers(1,7,3,,6,4,5)//(7) [1, 3, 4, 5, 6, 7, 9]
let [x,y] = [1,2,3]
console.log(x)//1
console.log(y)//2,3

三.箭头函数


箭头函数.png

3.1箭头函数的用法

let foo1 = function (x, y) {
    return x + y;
}
let foo2 = (x, y) => {
    return x + y;
}
//当代码体只有一句执行代码时
let foo3 = (x, y) => x + y;

3.2this指向问题:箭头函数不指向当前的调用者

//我们希望里面的this指向btn
let oBtn = document.querySelector('#btn')
console.log(oBtn);
oBtn.addEventListener('click', function (e) {
    
    setTimeout(function () {
        console.log(this);//window
    }, 1000)
})
-------------------------------------
//我们可以通过bind改变this指向
let oBtn = document.querySelector('#btn')
console.log(oBtn);
oBtn.addEventListener('click', function (e) {
    
    setTimeout(function () {
        console.log(this);//window
    }.bind(this), 1000)
})
非箭头函数.png
let oBtn = document.querySelector('#btn')
console.log(oBtn);
oBtn.addEventListener('click', function (e) {
    
    setTimeout(function () {
        console.log(this);
    }, 1000)
})
箭头函数.png

3.3 不可以当做构造函数,不可以使用arguments,与实际值不符
箭头函数中可用rest参数代替arguments
四:对象的拓展
4.1属性名与属性值一致时可以省略

let name = "123"
let age = "456"
let obj = { 
   name,age
};
console.log(obj);//{name: '123', age: '456'}

属性名为变量时:

let name = "123"
let age = "456"
let s = 'school'
let obj = {
    name, age,
    [s]:"789"
};
console.log(obj);//{name: '123', age: '456', school: '789'}

4.2Object.is(a,b)判断两个值是都严格相等(基本上相当于a===b)
4.3Object.assign(a,b)合并对象,属性冲突时,后边的属性会覆盖前面的属性
4.4in 判断对象中是否包含某个属性
数组可以判断在指定位置索引上是否有值
4.5对象遍历
①for in

for (const key in obj) {
    console.log(key);
    console.log(obj[key]);
}

②Object.keys()
Object.getOwnPropertyNames()与Object.keys()用法类似,Object.getOwnPropertyNames返回的是对象所有自己的属性,而Object.keys(obj)则返回的是所有可枚举属性,也就是属性下的enumerable: false

Object.keys(obj).forEach((item) => {
    console.log(item);
    console.log(obj[item]);

})

③类似的方法:

Object.values(obj).forEach((item)=>{
    console.log(item);
})//123 456 789
Object.entries(obj).forEach((item)=>{
    console.log(item[0]);//key
    console.log(item[1]);//value
})

相关文章

  • ES6--函数扩展

    函数新增特性 函数默认值,rest参数,扩展运算符,箭头函数,this绑定,尾调用 函数参数的默认值 rest参数...

  • 第2章 ES6基础编程

    函数的扩展 rest参数 箭头函数 rest参数-三点运算符 ES6 引入 rest 参数(形式为“...变量名”...

  • 第2章 ES6基础编程

    函数的扩展 rest参数 箭头函数 rest参数-三点运算符 ES6 引入 rest 参数(形式为“...变量名”...

  • es6-函数扩展

    函数新增特性 参数默认值 rest参数 扩展运算符 箭头函数 this绑定 尾调用 参数默认值 注意:默认值后面必...

  • es6--函数新增

    函数的扩展 函数参数设置默认值...rest参数箭头函数Promise函数Generator 函数async函数 ...

  • ES6知识点整理——函数扩展

    函数新增特性:参数默认值、rest参数、扩展运算符、箭头函数、this绑定、尾调用 1.参数默认值默认值后面不能有...

  • 尾调用与尾递归---->节省内存--->解决堆栈溢出

    函数的扩展 rest参数 rest参数用于获取函数的多余参数,不需要使用arguments对象。rest参数搭配的...

  • ES6学习笔记

    1. 变量的解构赋值 数组解构 对象解构 2. 箭头函数,rest参数 箭头函数 rest 参数 3. 数组: 扩...

  • 函数的参数,,扩展运算符,rest参数箭头函数,对象的拓展

    一.函数的参数1.默认值 默认参数的位置: 1.2.与解构配合使用 1.3.length属性:没有指定默认值的参数...

  • ES6

    1.模版字符串:`String` 2.对象解构赋值 3.函数扩展:rest参数 4.箭头函数 箭头函数的特点 4....

网友评论

      本文标题:函数的参数,,扩展运算符,rest参数箭头函数,对象的拓展

      本文链接:https://www.haomeiwen.com/subject/mwjbrrtx.html