es6-9集结

// 箭头函数 
let f = a => a + 1;
// 等价于
var f = function(a) {
    return a + 1;
}

// 模版字符串
let a = 'react'
let s = `hello ${a}`; // hello react


// 解构赋值
let [lang, ...other] = ['js', 'java', 'react']; // js , ['java', 'react']

// 扩展运算符 合并数组
let arr1 = ['a', 'a1'];
let arr2 = ['b'];
let newArr = [...arr1, ...arr2] // ['a', 'a1', 'b']

// 对象解构
let {
    person: {
        name,
        age
    },
    foo
} = {
    person: {
        name: 'tom',
        age: 4
    },
    foo: 'foo'
}
console.log(name, foo, age) // tom , foo , 4

// 默认值
let t = (a = 1) => a + 2
t(2) // 4
t() // 3

let o = '';
let temp = o || 1 // 1

// map用法
arr1.map(item => (
    item
))

// filter
arr1.filter(item => (item != 'a')) // a1

// swap 变量值交换
let foo = 1
let bar = 2

;
[foo, bar] = [bar, foo] // foo = 2 , bar = 1
复制代码

一、babel转化
1.环境搭建:
建立目录:
src:书写ES6代码的文件夹,写的js程序都放在这里。
dist:利用Babel编译成的ES5代码的文件夹,在HTML页面需要引入的时这里的js文件。

(1)在项目文件夹 命令行初始化 npm init -y
(2)全局安装babel-cli npm install -g babel-cli
(3)本地安装babel-preset-es2015 和 babel-cli :
npm install --save-dev babel-preset-es2015 babel-cli
(4)新建.babelrc
配置转码包:

    "presets":[
        "es2015"
    ],
    "plugins":[]
}
复制代码

在pakejson中配置转码命令:

"scripts": {
    "build": "babel src/index.js -o dist/index.js"
  },
  //命令行运行npm run build 即可将js转码到dist文件夹
复制代码

二、语法:

// ------------------1.变量的解构赋值--------------------------

    // ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

// *数组解构
    let [a, b, c] = [1, 2, 3];  //可以从数组中提取值,按照位置的对象关系对变量赋值。
    let [q, [w], e] = [1, [2], 3] //数组模式和赋值模式统一:

    let [t, y = 'js'] = ['技s']; //解构的默认值
    console.log(t + y);

//*对象的解构赋值
    let { foo, bar } = { foo: 'ss', bar: 'ee' };

    // 对象的解构与数组有的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

let oop;({oop} = {oop:'slce'})// 如果在对象解构前定义了变量  再用此变量解构时会出错,表达式外加()即可

//*字符串解构
    const [z,x,m,v,ll,n] = "JSPang";

//对象的函数解构
    // 直接把这个JSON格式数据当作参数,传递到函数内部进行处理
{
    let jsons = {
        "pp":"aa",
        "bb":"cc"
    }
    function lop ({pp,bb}) {
        console.log(pp,bb)
    }
    lop(jsons);
   
}

//数组的函数解构
{
    let ayy = [88,77,55];
    function ayys (a,b,c) {
        console.log(a- b -c);
    }
    ayys(...ayy);
}
    
    // ----------------------------------------2.扩展运算符和rest运算符(解决参数和对象数组未知情况下的编程,让代码更健壮和简洁。)
//(1)传入的参数不确定可以用...
function oop (...pl) {
console.log(pl);
}
oop(1,2,3,4);

//(2)解决对内存堆栈的引用,真正的赋值(用对象扩展运算符解决)原理是用[].concat(_a)
let a = [1];
let b = a; //对内存堆栈的引用,不是真正的赋值
b.push(2);
console.log(a) //[1,2]  
{
    let a = [1];
    let b = [...a];
        b.push(2);
        console.log('...解决变量的赋值' + a + "---" +b);
}

//reset运算符可以用做实参(代替它前面的实参所对应的形参所后面剩余的形参)  返回array类型
function rest (o,l,...p) {
console.log(p);
}
rest(2,4,6,8,0);

document.write('jdf'.repeat(3));//复制3个字符串


//---------------------------------------------------------------3.js对数字操作-------------------------------

//(1)数字判断和转换 
console.log(Number.isFinite(098))  //只要是数字则返回true,否则false;
console.log(Number.isInteger(0.33)); //判断是否为整数,是---true,否则false
console.log(Number.parseInt(3.3)) //3   浮点数转换为整数

console.log(Number.MAX_SAFE_INTEGER); //最大安全整数
console.log(Number.MIN_SAFE_INTEGER); //最小安全整数

let a = Math.pow(2, 53) - 1;
console.log(Number.isSafeInteger(a));//false     安全整数判断isSafeInteger()

//----------------------------------------------------------------4.数组---------------------------
// (1).json数组转换为数组

let json = {
    '0': 'ssss',
    '1': 'aaaa',
    '2': 'cccc',
    length: 3
}
console.log(Array.from(json)); //["ssss", "aaaa", "cccc"]  -----ES6中绝大部分的Array操作都存在于Array对象里。用Array.from(xxx)来进行转换
console.log(Array.of(2,'kk'))   // 将文本||变量转换为数组 


//find()实例方法: val:表示当前查找的值。 index:表示当前查找的数组索引。 arr:表示当前数组。
// 所谓的实例方法:就是并不是以Array对象开始的,而是必须有一个已经存在的数组
console.log(
    [1, 2, 3, 4].find(
        (val, index, arr) => {
            return val > 1; //找到了符合条件的值,如果找不到会显示undefined。
        }
    )
);

//(2).fill() 方法用于将一个固定值替换数组的元素。
//array.fill(value, start, end)  
//value	必需。填充的值。
// start	可选。开始填充位置。从0开始
// end	可选。停止填充位置(默认为 array.length)
['ni','hao','me','me','da'].fill('哈哈',0,1);

//(3). keys() 方法用于从数组创建一个包含数组键的可迭代对象。 如果对象是数组返回 true,否则返回 false。
//返回值:一个数组可迭代对象。
Object.keys({p:'d'})//用于对象返回其键 //p
["Banana", "Orange", "Apple", "Mango"].keys().next().value; //0  创建一个可迭代的对象,该对象包含数组的键

for (let i of [3,4,5].keys()) {
    console.log(i); //循环数组 返回数组的索引 0 1 2
}

{let a = [3, 4, 5, 6];
let s = a.keys();
console.log(s.next().value);//0
console.log(s.next().value)//1   -----------逐个输出数组的索引
}


//(4). entries() 方法返回一个数组的迭代对象,该对象包含数组的键值对(key / value) 。
//迭代对象中数组的索引值作为 key, 数组元素作为 value。
 for (let [index,val] of [7,8].entries()) {
     'use strict';
     console.log(index + 'h' + val);   //0h7 1h8  //同时输出数组索引和其对应的值;  [7,8].entries().next().value 输出[0,7]
 }


 //---------------------------------------------5.函数--------------------------------------------------
// (1)函数中的严谨模式

// 我们在ES中就经常使用严谨模式来进行编程,但是必须写在代码最上边,相当于全局使用。在ES6中我们可以写在函数体中,相当于针对函数来使用。

// function add(aS, bS = 1) {
//     'use strict'
//     if (aS == 0) {
//         throw new Error('This is error');
//     }
//     return aS + bS;
// }
// console.log(add(1));

// 上边的代码,浏览器控制台报错,这是ES6中的一个坑,。这个错误的原因就是使用了默认值,再使用严谨模式的话,就会有冲突,所取消默认值的操作。

function add(aS, bS) {
    'use strict'
    if (aS == 0) {
        throw new Error('This is error');
    }
    return aS + bS;
}
console.log(add(1, 2));

//in 方法判断对象或数组中是否有某个值

// 判断对象中是否有某个值
{
    let lkj = {
        "oop":"oop",
         "shift":"shfit"
    }
    console.log('oop' in lkj);
}

// 判断数组中是否有某个值
// 之前用数组的length来判断数组是否为空,但是有弊端,
// 比如:[,,,].length //3  其实是空值

//用in解决判断索引
console.log(0 in [,,,]); //false
console.log(0 in ['q','w','e']);  //true

// join()方法  在数组元素中间,加了一些间隔,开发中很有用处。
let arr = ['j', 'w', 'e'];
console.log(arr.join('|')); //j|w|e


//---------------------------------------------------6.对象-------------------------------
//  (1).d对象赋值:
// ES6允许把声明的变量直接赋值给对象:
{
    let [ab,ba] =  [1,2];
    var obs = {ab,ba}

}

// (2).对象Key值构建

// 截取数字
var yaoxi = "http://172.16.2.77:10800/play.html?channel=44";
var nani = parseInt(yaoxi.slice(yaoxi.split('').indexOf('=') + 1));
console.log(typeof nani + nani);

var yaoxi = "http://172.16.2.77:10800/play.html?channel=44";
console.log(yaoxi.split('=')[1].split('l').toString())



Object.is() //对象比较

// 对象的比较方法, 以前进行对象值的比较,经常使用 === 来判断,比如下面的代码:

var obj1 = { name: 'eeee' };
var obj2 = { name: 'eeee' };
console.log(obj1.name === obj2.name);//true
// 那ES6为我们提供了is方法进行对比。

var obj1 = { name: 'eeee' };
var obj2 = { name: 'eeee' };
console.log(obj1.name === obj2.name);//true
console.log(Object.is(obj1.name, obj2.name)); //true
// 区分 === 和 is方法的区别是什么,看下面的代码输出结果。

console.log(+0 === -0);  //true
console.log(NaN === NaN); //false
console.log(Object.is(+0, -0)); //false
console.log(Object.is(NaN, NaN)); //true
// === 为同值相等,is()为严格相等。
Object.assign() //对象合并

{
    let a = {a:'opop',bd:12};
    let b = {v:'pppp',dd:12};
    console.log(Object.assign(a,b));
}
 
// symobol在对象中的作用  对对象元素的保护

// symobol是es6新增的原始数据类型  它是JavaScript的第七种数据类型  表示独一无二的值
// Symbol值通过Symbol函数生成,只要属性名是属于Symbol类型的,就是独一无二的,可以保证不会与其他属性名产生冲突。
let s = Symbol('name'); //symbol 代表的是 唯一且不与其他任何类型相同的值 

// 用Symbol构建对象的Key,并调用和赋值。
{
    let sy = Symbol();
    var sys =  {
        [sy]:'la'
    }
    console.log(sys[sy]) //la
}

// 用Symbel对对对象的某个值进行保护  不让其输出

{
    let hu = {name:"hh",phone:'000',age:12};
    //  不让程序输出age
    // 先复制后删除
    let ageClone = hu.age;
    delete hu.age;
  let ages = Symbol();
    hu[ages] = ageClone;
    for (let x in hu) {
        console.log(hu[x]) //{name: "hh", phone: "000", Symbol(): 12}
    }
}



// ------------------------7、Set和WeakSet及map的数据结构-----------------------------

// 1.Set的数据结构(是以数组的形式构建的,实质并不是数组) 返回一个类数组
// Set和Array的显著区别:Set不允许数组有重复的元素()去重
new Set([1, 2, 3, 4, 1, 1, 1, 1])  //{1, 2, 3, 4}  

//  (1)Set 的增删改查

// add添加元素
new Set([1]).add('hh') //{1, "hh"}
{
   //delete删除元素
    let del = new Set([1,1,2]);
        del.delete(1);  //删除数组元素1
        console.log(del) //{2}
}
{
    // has查找元素是否存在  返回Boolea
    let cha = new Set([1,2,4,4]);
    cha.has(4);//true 查找是否存在元素4 
}
{
    //clear  清空数组内容
    let vb = new Set([2,3,45]);
        vb.clear();
        console.log(vb); //{}
}

{
    //size是Set的内置属性 获得Set值的数量
    new Set([1,2,3,4]).size //4

    let bop = new Set([1,2,3]);
        bop.forEach((item) => {console.log(item)})
}


// 2.  weakSet  传入的值必须是对象  返回一个对象数组
{
    let weakObj = new WeakSet();
    let obj = { a: '33', b: '44' }
    let obj1 = obj;
    weakObj.add(obj);
    weakObj.add(obj1);
    console.log(weakObj);    //value: { a: "33", b: "44" }   value是他的内置属性
}

//3.map数据结构 (常见处理对象的键和值) 可以将其看成key/value  返回类数组

{
    let ma = {
        name:'ppp',
        age:111
    }
    let map = new Map();
    map.set(ma,'dep')  //key: "ppp" value: "llll"
    map.get(ma) //dep 得到value
    map.delete(ma);//{}  清空键 
}  
    ```


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值