1. const 的定义:
1.1 常量定义的时候要赋值,不赋值是会报错的:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <script> 9 // 常量: 不能被改变值的 量 叫常量 10 // 1, 常量最开始定义的时候, 要给初始值 11 // 2, 常量不能被重新赋值 12 // 3, 常量的作用域是块级的 13 // 4,个人感觉有点像php 中的define 14 const a; //报错,没有初始化一个值 15 </script> 16 </head> 17 <body> 18 </body> 19 </html>
1.2 定义同时赋值
1 const a = 10; 2 console.log(a);
1.3 常量定义之后,不能再次赋值
1 const a = 10; 2 a = 100; //报错,不能给常量重新赋值 3 console.log(a);
1.4 常量是块级作用域
1 let a = 10; 2 if (a) { 3 const b = 100; 4 console.log(b); 5 } 6 console.log(b); //报错,访问不到块级作用域中的常量
1.5 对象常量不能改变:
1 const user = { 2 "name": "nihaome", 3 age: 22 4 }; 5 user = { //报错,常量不能被重新赋值 6 "name": 'zhangsan' 7 } 8 console.log(user);
1.6 对象常量的属性可以被改变:
如果常量定义的值 是一个对象, 那么对象不能被修改,
但是对象的属性值可以被修改
1 const user = { 2 "name": "nihaome", 3 age: 22 4 }; 5 user.name = 'zhangsan'; 6 console.log(user);
2. 默认参数:
2.1 默认参数之一:
1 function show(a, b) { 2 a = a || 10; 3 b = b || 20; 4 console.log(a, b); 5 } 6 show(1, 2);
2.2 默认参数之二:
1 function show(a, b) { 2 a = a || 10; 3 b = b || 20; 4 console.log(a, b); 5 } 6 show();
2.3 默认参数之三:
1 function show(a, b) { 2 a = a || 10; 3 b = b || 20; 4 console.log(a, b); 5 } 6 show(1);
2.3 默认参数之四:
1 function show(a, b) { 2 a = a || 10; 3 b = b || 20; 4 console.log(a, b); 5 } 6 show(0, 0); //0会转成false
默认参数:有传入参数值的时候,就使用传递的参数;没有传递参数,就使用默认参数
3. 表达式:先判定,再赋值
1 function show(a, b) { 2 a = typeof a === 'undefined' ? 10 : a; 3 b = typeof b === 'undefined' ? 20 : b; 4 console.log(a, b); 5 } 6 show(undefined, 30); 7 show();
4. 默认参数
1 function show( a = 10, b = 20, c = 30 ){ 2 console.log( a, b, c ); 3 } 4 show(); // 10, 20, 30, 没有传递参数就使用默认值 5 show( 100 ); // 100, 20, 30, 没有传递参数就使用默认值 6 show( 100, 200 ); // 100, 200, 30, 没有传递参数就使用默认值 7 show( 100, 200, 300 ); // 100, 200, 30, 没有传递参数就使用默认值
5. 默认参数 undefined
1 function show(name, age = 22, sex) { 2 console.log(name, age, sex); 3 } 4 //函数在没有传值得时候,默认为undefined 5 show(); //undefined,22,undefined 使用name,age,sex的默认参数 6 7 //函数显示的传递undefined,相当于没有传递参数,所以age用默认值22 8 show(undefined, undefined, undefined); //undefined,22,undefined 9 10 //函数传递null的时候,不会等于undefined,相当于传null值, 会把age的默认值覆盖 11 show(undefined, null, undefined); //undefined, null, undefined
6. 非严格模式下,参数会同步到arguments
1 //在非严格模式下,参数的修改会同步到arguments 2 function show(name, age) { 3 console.log(name == arguments[0]); //true 4 console.log(age == arguments[1]); //true 5 name = 'zhangsan'; 6 age = 30; 7 console.log(name == arguments[0]); //true 8 console.log(age == arguments[1]); //true 9 } 10 show('hehheh', 22);
7. 严格模式下,参数与arguments 不同步(严格模式,在代码前加入一行"use strict")
1 "use strict"; 2 3 function show(name, age) { 4 console.log(name == arguments[0]); //true 5 console.log(age == arguments[1]); //true 6 name = 'zhangsan'; 7 age = 30; 8 console.log(name == arguments[0]); //false 9 console.log(age == arguments[1]); //false 10 } 11 show('hehhe', 22);
8.默认参数和arguments:默认参数和arguments 是有差异的
1 function show(name, age = 22) { 2 console.log(arguments.length); //1 3 console.log(name === arguments[0]); //true 4 console.log(age, arguments[1]); //22, undefined 5 console.log(age === arguments[1]); //false 6 7 name = 'zhangsan'; 8 age = 30; 9 console.log(name, age, arguments[0], arguments[1]); //zhangsan, 30, nani, undefined 10 console.log(name == arguments[0]); //false 11 console.log(age == arguments[1]); //false 12 } 13 show('nani');
9. 函数作为默认参数:
1 function getVal() { 2 return 10; 3 } 4 5 function add(a, b = getVal()) { 6 return a + b; 7 } 8 9 //相当于 a = 100, b = 200 10 console.log(add(100, 200)); //300 11 //相当于 a = 100, b没有传值, 采用getVal()的返回值10 12 console.log(add(100)); //110