ECMAScript——函数参数的默认值、rest参数、扩展运算符、Symbol

86 篇文章 0 订阅
73 篇文章 0 订阅

ECMAScript

函数参数的默认值

ES6允许给函数参数赋值初始值

特性:

​ 1.形参初始值,具有默认值的的形参,一般位置要靠后(潜规则)

​ 2.可以与解构赋值一起使用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=
    , initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1.形参初始值,具有默认值的的形参,一般位置要靠后(潜规则)
        // 当没有传递给c实参时,c会默认等于10
        /* function add(a, b, c = 10) {
            return a + b + c;
        };
        //c没有初始值,且没有对应c的实参,c就是undefined的,然后1+2+undefined就等于NaN
        let res = add(1, 2); //NaN
        console.log(res); */
        // 2.可以与解构赋值一起使用
        /* function connect(options) {
            let host = options.host;
            let username = options.username;
            let password = options.password;
            let port = options.port
        }; */
        // 同名赋值
        function connect({
            host = '127.0.0.1', //当host没有传,就可以使用初始值
            username,
            password,
            port
        }) {
            console.log(host);
            console.log(username);
            console.log(password);
            console.log(port);
        };
        connect({
            // host: 'localhost',
            username: 'oot',
            password: 'root',
            port: 3306
        })
    </script>
</body>

</html>
rest参数

ES6引入rest参数,用于获取函数的实参,用来代替arguments

rest参数必须放到参数最后

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // ES5获取实参的方式——arguments
        /* function func() {
            console.log(arguments);//是一个数组对象,是对象,不是数组
        };
        func(1, 2, 3, 4); */
        // ES6获取实参的方式——rest
        // args是自定义的
        /*  function func(...args) {
             console.log(args); //是一个数组,所以可以使用数组API的方法,如:filter,map,some等等
         }
         func(1, 2, 3, 4); */
        //  res:存放剩余的参数,形成一个数组
        function fun(a, b, ...res) {
            console.log(a);
            console.log(b);
            console.log(res);
        }
        fun(1, 2, 3, 4, 5, 6, 7)
    </script>
</body>

</html>
扩展运算符

[…]:扩展运算符能将[数组]转换为逗号分隔的[参数序列]

rest参数是放在形参里面,扩展运算符是放在实参里面

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //声明一个数组
        const goods = ['香蕉', '草莓', '葡萄', '苹果'];
        // 声明一个函数
        function changed() {
            console.log(arguments);
            // return arguments
        };
        // const res = changed(...goods);
        // console.log(res[0]);
        changed(...goods); //changed('香蕉', '草莓', '葡萄', '苹果')
    </script>
</body>

</html>

扩展运算符的应用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div></div>
    <div></div>
    <div></div>
    <script>
        // 1.数组合并
        /*  const arr1 = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];
         const arr2 = ['白骨精', '蜘蛛精', '蛇精', '妖精'];
         // 合并两个数组
         // const res = arr1.concat(arr2);
         const res = [...arr1, ...arr2];
         console.log(res); */
        // 2.数组的克隆
        /* const arr1 = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];
        // 里面是引用数据类型的话,也是浅拷贝(拷贝引用地址,会互相影响)
        const res = [...arr1]; //['孙悟空', '猪八戒', '沙和尚', '唐僧']
        console.log(res); */
        // 3.将伪数组转为真正的数组
        const divs = document.querySelectorAll('div');
        console.log(divs); //伪数组,不可使用数组的API
        const divsArr = [...divs];
        console.log(divsArr); //可以使用数组的API
    </script>
</body>

</html>
Symbol基本使用

ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是Javascript语言的第七种数据类型,是一种类似于字符串的数据类型

特点:

​ 1.symbol的值是唯一的,用来解决命名冲突的问题(作唯一标识的)

  1. symbol值不能与其他数据进行运算
  2. symbol定义的对象属性不能使用for…in循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 创建
        let s = Symbol();
        console.log(typeof s); //symbol
        let s2 = Symbol('zs');
        let s3 = Symbol('zs');
        console.log(s2 === s3); //false;s2和s3只是一个编号,内容是一样的,但是编号的不一样的,
        // 比如身份证,人名是一样,但是身份证号不一致
        // 2.创建(函数对象),登记在全局供搜索
        let s4 = Symbol.for('ls');
        let s5 = Symbol.for('ls');
        console.log(s4 === s5); //true
        // 1.不能与其他数据进行运算
        let res = s + 100;
        console.log(res); //报错:Uncaught TypeError: Cannot convert a Symbol value to a number
    </script>
</body>

</html>

js的数据类型:USONB

U:undefined

S:String、Symbol

O:Object

N:null

B:Boolean

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 向对象中添加方法
        let obj = {};
        // 先声明一个对象
        let methods = {
            up: Symbol(),
            down: Symbol()
        };
        // 1.添加方式,很安全,不会与原有的同名属性冲突
        /* obj[methods.up] = function() {
            console.log("我要努力的往上爬");
        };
        obj[methods.down] = function() {
            console.log("我可以快速的向下滚");
        };
        // 调用
        obj[methods.up](); */
        let game = {
            name: '王者荣耀',
            [Symbol('king')]: function() {
                console.log('王者段位');
            },
            [Symbol('lower')]: function() {
                console.log('菜鸟级别');
            }
        }
        console.log(game);
    </script>
</body>

</html>
Symbol的内置值

除了自己定义的Symbol值之外,ES6还提供了11个内置的Symbol值(Symbol的属性),指向语言内部使用的方法

这些内置都当做对象的属性存在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值