• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MC_Hotdog
Yeah, you're right I'm still riding that crappy bike
博客园    首页    新随笔    联系   管理    订阅  订阅

ES6语法

let-var-const的区别

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<script>
    /*
    // 1.变量作用域: 变量在什么范围内是可用
    {
        var name = 'kobe';
        console.log(name);
    }
    // 能访问 在C C++是不能访问的
    console.log(name);
    */

    //2.没有块级作用域引起的问题 if块级
    var func;
    if(true){
        var name = 'why';
        func = function () {
            console.log(name);
        };
        func() //why
    }
    name = 'kobe';
    func(); // kobe

    //3.没有块级作用域引起的问题  for块级
    // ES5写法  使用闭包解决作用域问题
    /*
    var btns = document.getElementsByTagName('button');
    for(var i=0; i < btns.length; i++){
        (function (i) {
            btns[i].addEventListener('click', function () {
                console.log('第' + i + '个按钮被按下');
            })
        })(i)
    }
    */

    // ES6写法
    const btns = document.getElementsByTagName('button');
    for(let i=0; i < btns.length; i++){
        btns[i].addEventListener('click', function () {
            console.log('第' + i + '个按钮被按下');
        })
    }
    // 1.一旦使用const修饰的标识符,不能修改
    // const number = 123;
    // number = 124
    // 2.必须赋一个初始值
    // const number;
    // 3. 常量的含义是指向对象不能被修改,但是可以修改对象内部的属性
    const obj = {
        name: 'kobe',
        age: 40,
        height: 1.98
    };
    console.log(obj);
    obj.name = 'why';
    console.log(obj);
</script>
</body>
</html>  

属性的增强写法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 字面量增强
    // const obj = new Object();
    // const obj = {};

    // 1.属性、函数的增强写法
    /*
    // ES5 写法
    const obj = {
        name: 'Kebo',
        age: 40,
        height: 1.99,
        run:function () {
            console.log('正在奔跑');
        },
        eat: function () {
            console.log('在吃东西');
        }
    };
    */

    const name = 'Kebo';
    const age = 40;
    const height = 1.99;
    const obj = {
        name,
        age,
        height,
        run(){
            console.log('正在奔跑');
        },
        eat(){
            console.log('在吃东西');
        }
    };
    console.log(obj);
    obj.run();
    obj.eat()

</script>
</body>
</html>  

for循环区别

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="app">
    <h2>总价格:{{totalPrice}}</h2>
</div>

<script>
    const app = new Vue({
        el: '#app',
        data: {
            books: [
                {id: 110, name: 'Linux编程艺术', price: 119},
                {id: 111, name: '代码大全', price: 120},
                {id: 112, name: '深入理解计算机原理', price: 150},
                {id: 113, name: '现代操作系统', price: 140},
            ]
        },
        computed: {
            totalPrice: function () {
                let result = 0;
                /*
                for (let i=0; i < this.books.length; i++) {
                    result += this.books[i].price
                }
                return result
                */

                /*
                es6写法
                for (let i in this.books) {
                    result += this.books[i].price
                }
                return result
                */
                // es6写法
                for (let book of this.books) {
                    result += book.price
                }
                return result
            }
        }
    })
</script>
</body>
</html>  

高阶函数的使用(在小项目中使用到reduce计算总的价格)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*
    编程范式:命令式编程/申明式编程
    编程范式:面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
    filter/map/reduce
    filter中回调函数有一个要求:必须返回一个boolean值
    true:当返回是true时,函数内部会自动将这次回调的n加入到新的数组中
    false:当返回是false时,函数内部会过滤掉这次的n
    */
    const nums = [1, 10, 100, 50, 20, 30, 70, 500, 222];
    let total = nums.filter(n => n < 100).map(n => n * 2).reduce((pre, n) => pre + n, 2);
    console.log(total);
    // 1.filter过滤函数的使用 在数组中对每个元素做操作
    let newNums = nums.filter(function (n) {
        return n < 100
    });
    console.log(newNums);

    // 2. map函数的使用 对数组中每个元素做操作
    let new2Nums = newNums.map(function (n) {
        return n * 2
    });
    console.log(new2Nums);


    // 3. reduce函数的使用  作用:对数组中的值进行汇总
    let new3Nums = new2Nums.reduce(function (preValue, num) {
        return preValue + num
    }, 2);
    console.log(new3Nums);
</script>
</body>
</html>

ES6导入导出

aaa.js

/*
// 闭包可以解决var变量作用域问题
;(function () {
    let name = '小明';
    let age = 18;
    function sum(num1, num2) {
        return num1 + num2
    }
})();




// 模块化 其它文件可以调用
let ModuleA = (function () {
    let obj = {};
    obj.name = '小明';
    obj.age = 18;
    obj.mySum = function sum(num1, num2) {
        return num1 + num2
    };
    return obj
})();

ModuleA.mySum(10, 20);









CommonJS的导出

module.exports = {
    flag: true,
    sum(a, b){
        return a + b
    }
};

CommonJS的导入
let {flag, sum} = require('module');
等同于
let _mA = require(module);
let flag = _mA.flag;
let sum = _mA.sum;
*/

let name = '小明';
let age = 18;
function sum(num1, num2) {
    return num1 + num2
}

// 1. 导出方式一
export {
    name,
    age,
    sum
}

// 2. 导出方式二
export let num = 1000;


// 3.导出函数/类

// es5 函数
export function mul(num1, num2) {
    return num1 * num2
}


// es5 类
function Person1() {

}

export {
    Person1,
}



// es6 类
export class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    run() {
        console.log(this.name + '在奔跑');
    }
}

// 默认同一模块中default只能一次
/*
const address = '成都市';
export default address
*/

export default function (argument) {
    console.log(argument);
}  

 bbb.js

import {sum, mul, Person} from "./aaa.js";

console.log(sum(10, 20), mul(10, 20));

const p = new Person('智障', 18);
p.run();


//  统一全部导入
import * as aaaa from "./aaa.js"

console.log(aaaa.sum(40, 40));

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script src="./aaa.js" type="module"></script>
<script src="./bbb.js" type="module"></script>
<script src="./mmm.js" type="module"></script>
<!--模块化 type="module"-->
</body>
</html>  

 mmm.js

import {name, age, num, } from "./aaa.js";  // 这里不要简写 不然404找不到
import addr from "./aaa.js";

console.log(name, age, num);
addr('你好啊!');
console.log(addr);  

 

箭头函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 1. 定义函数的方式
    const aa = function () {
        
    }
    // 2.对象在字面量中定义函数+增强写法
    const obj = {
        bbb: function () {

        },
        aaa() {

        }
    }

    // 3. ES6中的箭头函数
    // const ccc = (参数列表) => {
    //
    // }
    // 3.1无参数情况
    const ccc = () => {

    }
    // 3.2有参数情况两个参数
    const sum = (num1, num2) => {
        return num1 + num2
    }
    // 3.3有参数并且一个参数
    const power = (num) => {
        return num * num
    }

    const power1 = num => {
        return num * num
    }

    const test = () => {

    }

    // 代码只有一行的情况+有返回值
    const mul = (num1, num2) => num1 * num2
    console.log(mul(20, 30));

    //无返回值
    const demo = () => console.log('Hello')
</script>
</body>
</html>  

判断this  一层层的看

// es6 中对象的解构
const obj = {
    name: '科比',
    age: 18,
    height: 1.98,
    address: '洛杉矶'
}

const {name, height, age} = obj
console.log(name);
console.log(height);
console.log(age);

  

  

 

posted @ 2019-10-28 21:25  MC_Hotdog  阅读(281)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3