一、“…”的作用
- 拓展运算符(多用在解构赋值中)
- 展开运算符(多用在传递实参中)
- 剩余运算符(多用在接收实参中)
// 解构赋值let [n, ...m] = [12, 23, 34];// n:12// m:[23, 34]// 传递实参let ary = [12, 23, 13, 24, 10, 25];let min = Math.min(...ary);// 数组克隆(浅克隆)let cloneAry = [...ary];// 对象克隆(浅克隆)let obj = {name:'园园', age:16};let cloneObj={...obj, sex:'girl', age:17};// 接收实参let fn=(n, ...arg) => {// n:10// arg:[20,30]};fn(10, 20, 30);
二、class 创建类
// 传统 ES3 / ES5 中创建类的方法function Fn(){this.x = 100;};Fn.prototype.getX = function(){console.log(this.x);};var f1 = new Fn();f1.getX();// 也可以把它当做普通函数执行Fn();// 还可以把Fn当做普通的对象设置键值对Fn.queryX = function(){};Fn.queryX();
// ES6 中类的创建class Fn{// 等价于之间的构造函数体constructor(n, m){this.x = 100;}// 给实例设置的私有属性y=200// 直接写的方法就是加在原型上的 === Fn.prototype.getX...getX () {console.log(this.x);}// 前面设置 static 的:把当前 Fn 当做普通对象设置的键值对static queryX () {}static z = 300}// 也可以在外面单独这样写Fn.prototype.y = 200;Fn.z = 300;let f = new Fn(10, 20);f.getX();Fn.queryX();Fn(); // Uncaught TypeError: Class constructor Fn cannot be invoked without 'new' =>// class 创建的类只能 new 执行,不能当做普通函数执行
三、ES6中的模板字符串
let year = '2019',month = '08',day = '09';// "你好,小伙伴!今天是2019年08月09日,今天天气很糟糕,马上就要下大雨了,呵呵呵~~~"let res = "你好,小伙伴!今天是" + year + "年" + month + "月" + day + "日,今天天气很糟糕,马上就要下大雨了,呵呵呵~~~";let ID = "box";let html = '<ul class="list clear" id="'+ID+'">';// 我们真实项目中会大量进行字符串拼接操作(尤其是需要动态绑定数据:把现有的 HTML 代码拼接成有数据的 HTML 字符串),传统的 ES3 语法模式下字符串拼接是一个非常苦逼的任务 ┭┮﹏┭┮
let year = '2019',month = '08',day = '09';// 反引号(撇) TAB 键上面的 (ES6 模板字符串语法)// ${} 模板字符串中书写 JS 表达式的方式(凡是有输出结果的都可以被称为JS表达式,一般都是一行搞定的)let res = `你好,小伙伴!今天是${year}年${month}月${day}日,今天天气很糟糕,马上就要下大雨了,呵呵呵~~~`;let ID = "box";let HTML = `<ul class="list clear" id="${ID}"><li><a href="javascript:;"><img src="img/1.jpg" alt=""><p></p><span>¥3899</span></a></li></ul>`;// 传统方式拼接一套 HTML 字符串,还需要一行行的处理,非常麻烦
四、THIS 和面向对象的深入理解
function sum(){// ARGUMENTS:内置的实参集合(箭头函数中没有),不是数组是类数组(它不是数组的实例,不能直接使用数组的方法 arguments.__proto__===Object.prototype)let total = null;for(let i = 0;i < arguments.length; i++){total += arguments[i];}return total;}let total = sum(10, 20, 30, 40);
// ARG:存储传递的实参信息(数组)// eval:把字符串转换为 JS 表达式执行let sum = (...arg => eval(arg.join('+'));let total = sum(10, 20, 30, 40);
如果 ARGUMENTS 是一个数组就好了~~~
~function () {function slice (n) {// n:0 把数组克隆一份新的出来let newAry = [];for(let i = 0; i < this.length; i++){newAry.push(this[i]);}return newAry;}Array.prototype.slice = slice;}();let ary = [10, 20, 30, 40];let newAry = ary.slice(0); // 数组克隆//--------------------------function sum () {// 把 ARGUMENTS 转换为数组:借用数组原型上的 SLICE 方法,只要让 SLICE 中的 THIS 指向 ARGUMENTS,就相当于把 ARGUMENTS 转换为新数组// let arg = Array.prototype.slice.call(arguments,0);let arg = [].slice.call(arguments, 0);// 数组求和return eval(arg.join('+'));}let total = sum(10, 20, 30, 40);
不仅仅是一个方法可以这样调用,很多数组的方法,类数组都能用~~
function sum () {let total = null;[].forEach.call(arguments,item => {total += item;});return total;}let total = sum(10, 20, 30, 40);
五、UI 组件库
有结构、样式、功能的库,里面提供很多开发中常用的组件,开发中直接把组件调取过来使用即可,无需从头开发(可能需要二次开发)
- bootstrap(经常配合 JQ 一起用):支持响应式布局开发(栅格系统)
- vue:vue element / iview
- react:antd
- EasyUI / AmazeUI ….
https://www.bootcss.com/
Bootstrap- v3.x
- v4.x : https://v4.bootcss.com/
六、JSON 格式的数据
我们基于 AJAX 等其它方式从服务器获取的数据结果一般都是:JSON 格式或者 XML 格式
- JSON 格式的字符串
- JSON 格式的对象
// 普通对象let obj = {name:"珠峰"};// JSON 格式对象(其实就是把属性名用双引号包起来)obj = {"name":"珠峰"};// JSON格式的字符串let str = '{"name":"珠峰"}';
把 JSON 格式的字符串转换为对象:window.JSON.parse
let str = '{"name":"珠峰"}';let obj = JSON.parse(str);// { name:"珠峰" }// 在IE 低版本浏览器中,全局对象 window中没有 JSON 这个对象,也就没有所谓的 parse 等方法了obj = eval('('+str+')'); // 基于 eval 可以实现,但是为了保证转换格式正确,我们需要把字符串用小括号包起来转换
把对象转换为JSON格式字符串:JSON.stringify
let obj = {name:"珠峰"};let str = JSON.stringify(obj); // '{"name":"珠峰"}'
七、关于 SORT 排序的
// 把数组中的每一项按照 AGE 进行升序排列// ORT中传递一个函数,函数中有 A / B// A当前项的后一项// B当前项// 果当前函数返回的是一个小于零的值,让 A 和 B 的位置互换,如果返回的是大于等于零的值,位置保持不变let ary = [{id: 1,age: 25,name: '张三'}, {id: 2,age: 32,name: '李四'}, {id: 3,age: 23,name: '张五'}];// 按照 NAME 排序 : localeCompare 能够进行字符串比较/* ary.sort((a, b) => {return a.name.localeCompare(b.name);}); */// 按照 AGE 升序和降序/* ary.sort((a, b) => {return a.age - b.age;});ary.sort((a, b) => {return (a.age - b.age) * -1;}); */console.log(ary);
