默认参数设置
//es6里可以给定义的函数接受的参数设置默认的值;
//如果不去指定函数参数的值 那函数调用的时候
就使用默认的值
function breakfast_1(dessert="apple",drink="tea"){//指定默认值 直接在形参的后面赋值
return `${dessert}+and+${drink}`;
}
console.log(
breakfast_1()
);
console.log("......现在设置他们的值后......")
console.log(
breakfast_1("X倒日本","R倒棒子")
);
…es6中心添加的操作符号 可以叫做spread或者rest
let fruit=["apple","banana"],
foods=["姑娘","小伙","法海",...fruit];//fruit展开放入到foods中
//展开
console.log(fruit);//输出的是数组
console.log(...fruit);//单独输出的是数组里的每一个值 相当于把数组展开了
console.log(foods);
//...rest 剩余操作符 一般用在函数的参数里面
function breakfast_2(dessert,drink,...food){
//让函数支持更多的参数
console.log(dessert,drink,food);//其余的参数放在了一个叫food的数组里
console.log("--------下面的是展开的---------");
console.log(dessert,drink,...food);
}
breakfast_2("apple","tea","tea1","tea2","tea3");
解构参数
function breakfast_3(man,woman,{location,restaurant}={}){
console.log(man+"和"+woman+"在"+location+restaurant+"洗澡");
}
breakfast_3("乔瑞","漂亮姑娘",{location:"上海",restaurant:"必胜客"});
function breakfast_4(man,woman,{location,restaurant}={}){
//es6给函数添加了个name属性 能得到函数的名字
}
console.log(
breakfast_4.name
);
//如果是匿名函数 函数名字就是定义的变量
// 如果是定义变量的有名字函数 那么打印出来的还是函数的名字而不是定义的变量
let breakfast= function breakfast_5(man,woman,{location,restaurant}={}){
//es6给函数添加了个name属性 能得到函数的名字
};
console.log(
breakfast.name//因为breakfast_5它的优先级更高
);
箭头函数 使用箭头定义函数的方式
let breakfast_6 = dessert => dessert;
//let定义变量 变量名 =函数开始接受的参数 => 函数返回的值
//普通的写法
var breakfast_7 =function breakfast_7(dessert) {
return dessert
};
// 如果有多个参数
let breakfast_8 = (dessert,drink) => dessert + drink;
// 如果无参数
let breakfast_9 = () => console.log("this 里面没参数");
breakfast_9();
//let 变量=变量值
let dessert="cake",drink="coco";
foods={//dessert属性:dessert属性值
// 在对象里面添加跟变量名一样的属性的话,并且属性的值就是变量表示的值;可以直接把:以后都去掉
dessert,
drink,
breackfast_old:function(){alert("old")},// 以前的写法
breackfast_now(){alert("now")}// 现在的写法
};
foods.breackfast_old();
foods.breackfast_now();
对象属性名
let man={},drinks="name little";
man.name="make";
//属性名中间不能有空格man.name little="daead"
// 如果有空格可以用方括号+""
man["name little"]="daead";
man[drinks]="daead";//这和上行的代码是一样的意思
//判断两个东西是不是同一东西nan=nan,+0!=-0
console.log(
Object.is([],Array)
);
Object.assign()把对象的值赋值到另一个对象里
let breakfast_10 = {};
//Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到//目标对象。它将返回目标对象。
Object.assign(
breakfast_10,//接受者
{drink:"beer"}//复制来源
)
console.log(breakfast_10);
Object.is() 方法判断两个值是否是相同的值。
Object.is(value1, value2);
参数
value1第一个需要比较的值。
value2第二个需要比较的值。
返回值表示两个参数是否相同的布尔值 。
Object.is() 判断两个值是否相同。如果下列任何一项成立,则两个值相同:
两个值都是 undefined
两个值都是 null
两个值都是 true 或者都是 false
两个值是由相同个数的字符按照相同的顺序组成的字符串
两个值指向同一个对象
两个值都是数字并且
都是正零 +0
都是负零 -0
都是 NaN
都是除零和 NaN 外的其它同一个数字
这种相等性判断逻辑和传统的 == 运算不同,== 运算符会对它两边的操作数做隐式类型转换(如果它们类型不同),然后才进行相等性比较,(所以才会有类似 "" == false 等于 true 的现象),但 Object.is 不会做这种类型转换。
这与 === 运算符的判定方式也不一样。=== 运算符(和== 运算符)将数字值 -0 和 +0 视为相等,并认为 Number.NaN 不等于 NaN。
使用__proto__设置继承别的对象里的方法
let breakfast_11 = {
getDrink () {
return "coffee"
}
};
let dinner = {
getDrink(){
return "beer";
}
};
let sunday={
__proto__:breakfast_11,//这个sunday就拥有了breakfast_11下的getDrink的方法
//如果想在sunday里面重新定义getDrink方法 覆盖掉breakfast_11对象里的getDrink方法
//并且想在这个sunday的getDrink方法里得到breakfast_11的getDrink方法返回来的值
// super+方法名字 得到方法返回来的东西
getDrink(){
return super.getDrink()+"wahahahahahh";
//执行breakfast_11对象里面的getDrink方法去得到返回来的值
}
};
console.log(sunday.getDrink());
console.log(Object.getPrototypeOf(sunday) === breakfast_11);