function es6deconstruct(){
let obj={
x:1,
y:2,
z:3
}
const {x:a,y:b,z:c} = obj;
console.log([a,b,c])
}
function arrDeconstruct(){
const [a,b,c,d] = [1,2,3,4];
const [e,,,f] = [1,2,3,4];
console.log([a,b,c,d]);
console.log([e,f]);
}
function exceptFirst2(){
const originalArr = [1,2,3,4]
const [,,...arr] = originalArr;
console.log(arr);
}
// es6deconstruct()//[1,2,3]
// arrDeconstruct()//[1,2,3,4] [1,4]
// exceptFirst2()//[3,4]
function templateStirng(){
const person={
name:"周子越",
age:21
};
console.log(person.age)
//注意这里字符串应该用反引号括起来,就是键盘左上角的那个
const string = `hello my name is ${person.name},my age is ${person.age}`;
console.log(string);
}
// templateStirng()//hello my name is 周子越,my age is 21
let es5construct=function(args){
this.args = args;
}
class es6class{
constructor(args){
this.args = args;
}
get name(){
return this._name;
// return 2;
}
set name(name){
this._name = 3;
}
}
let es5obj = new es5construct("es5");
let es6obj = new es6class("es6");
// console.log(es5obj.args);
// console.log(es6obj.args);
// es6obj.name = 2;
// console.log(es6obj.name);
// let arr = [1,2,3,4]
// let a = [];
// a.push(...arr);
// console.log(a);
// function flatten(arr){
// let newArr = [];
// for(let i = 0;i<arr.length;i++){
// if(Array.isArray(arr[i])){
// newArr = newArr.concat(flatten(arr[i]));
// }
// else{
// newArr = newArr.concat(arr[i]);
// }
// }
// return newArr;
// }
// function flatten(arr){
// return arr.toString().split(',').map(item=>{
// return Number(item)
// })
// }
// const a = [1, [2, [3, 4]]];
// console.log(flatten(a));
// function flatten(arr){
// while(arr.some(item=>Array.isArray(item))){
// arr = [].concat(...arr);
// }
// return arr
// }
// const a = [1, [2, [3, 4]]];
// console.log(flatten(a));
// function flatten(arr) {
// let result = [];
// for (let i = 0; i < arr.length; i++) {
// if (Array.isArray(arr[i])) {
// result = result.concat(flatten(arr[i]));
// } else {
// result = result.concat(arr[i]);
// }
// }
// return result;
// }
// const a = [1, [2, [3, 4]]];
// console.log(flatten(a));
// let arr = Array.from(new Set([11,55,6,1,1,1,5]))
// console.log(arr);//[11,55,6,1,5]
// let symbol1 = Symbol("aaa");
// let symbol2= Symbol("aaa");
// console.log(symbol1 == symbol2)
// function curryingAdd(x){
// if(arguments.length == 2)return arguments[0]+arguments[1];
// return function(y){
// return x+y;
// }
// }
// console.log(curryingAdd(1)(2));
// console.log(curryingAdd(3,5));
// function curry (fn, currArgs) {
// return function() {
// // let args = [...arguments];
// let args = Array.prototype.slice.call(arguments);
// // 首次调用时,若未提供最后一个参数currArgs,则不用进行args的拼接
// if (currArgs !== undefined) {
// args = args.concat(currArgs);
// }
// // 递归调用
// // console.log(fn.length);
// if (args.length < fn.length) {
// return curry(fn, args);
// }
// // 递归出口
// return fn.apply(null, args);
// }
// }
// function sum(a, b, c) {
// console.log(a + b + c);
// }
// const fn = curry(sum);
// fn(1, 2, 3); // 6
// fn(1, 2)(3); // 6
// fn(1)(2, 3); // 6
// fn(1)(2)(3); // 6
// function debounce(func,time){//防抖,指定时间内连续触发某个时间,事件会进行初始化
// //先设定一个定时器,置为null
// //查看当前是否有定时器,如果有就清除定时器,重新设置定时器。
// let timer = null
// return function(){
// if(timer) clearTimeout(timer);
// timer = setTimeout(function(){
// func.apply(this,arguments);
// },time)
// }
// }
// function throttle(func,time){//节流,指定时间内触发一个事件,只会执行首次
// //设置标志位为true,如果触发事件,先看标志位决定是否执行,
// //如果执行,就将标志位置为false,在time时间后再将标志位改成true
// let canRun = true;
// return function(){
// if(!timer) return;
// canRun = false;
// timer = setTimeout(function(){
// func.apply(this,arguments)
// canRun = true;
// })
// }
// }
// function deepCopy(obj){
// let newObj;
// if(typeof obj === "object"){
// newObj = Array.isArray(obj)?[]:{};
// for(let key in obj){
// newObj[key] = typeof obj === "object"?deepCopy(obj[key]):obj[key];
// }
// }else{
// newObj = obj;
// }
// return newObj;
// }
// function deepCopy(obj){
// JSON.parse(JSON.stringify(obj));
// }
// function arrayRandom(arr){
// return arr.sort(()=>{
// return Math.random()-0.5;
// })
// }
// console.log(arrayRandom([1,2,3,4,5,6,7,8,9]));//[2,1,3,4,9,5,6,7,8]
// // 著名的Fisher–Yates(费舍尔耶茨) shuffle 洗牌算法
// function shuffle(arr) {
// let res = arr,
// m = arr.length;
// while(m > 1){
// let index = Math.random() * (m--);
// [res [m], res [index]] = [res [index], res [m]];
// }
// return res;
// }
// function shuffle(arr) {
// for(let i = arr.length-1;i>1;i--){
// let randomIndex = Math.floor(Math.random()*i);
// [arr[i],arr[randomIndex]] = [arr[randomIndex],arr[i]];
// }
// return arr;
// }
// console.log(shuffle([1,2,3,4,5,6,7,8,9]));//[8,7,4,5,6,2,3,9,1]
// Function.prototype.myCall = function(context){
// // if(typeof context === "undefined" || context === null){
// // context = window;
// // }
// context = context || window;//与上面的表达是等价的
// context.fn = this;
// const args = [...arguments].slice(1);//去掉第一个,因为第一个是上下文
// const result = context.fn(...args);
// delete context.fn;
// return result;
// }
// Function.prototype.myCall = function(context) {
// if (typeof context === "undefined" || context === null) {
// context = window
// }
// //context=context||window 和上面的代码一样
// context.fn = this
// const args = [...arguments].slice(1)
// const result = context.fn(...args)
// delete context.fn
// return result
// }
function test(){
console.log(this.a);
}
var a = 40;
let obj = {
a:1
}
Function.prototype.myBind=function(context){
}
// test.myCall(obj);//1
// test.call(undefined);//1
// Function.prototype.myApply = function(context){
// context = context || window;
// context.fn = this;
// let result = arguments[1]?context.fn(...arguments[1]):context.fn();
// delete context.fn;
// return result;
// }
// test.myApply(obj);//1
// test.myApply();//40
console