资讯专栏INFORMATION COLUMN

JS基础入门篇(四十三)— ES6(一)

jerryloveemily / 2065人阅读

摘要:已经被声明了举例说明块级作用域报错,常量初始化之后内部值不可改必须初始化赋值的问题。不支持预解析不允许重复声明支持块级作用域举例说明报错,。解决地址引用的方法通过转化为字符串,再转化为对象。此方法存在问题中缺少

1.var , let , const

var

    1.预解析(变量提升)
    2.可以重复声明变量       

let

    1.不支持预解析(必须先声明,后使用) 
    2.不支持重复声明
    3.支持块级作用域 

1.举例说明—预解析

    console.log(a);//undefind
    var a=2;

    console.log(b);//报错,b is not defined。
    let b=3;

由于var存在预解析,所以不会报错。let不存在预解析

    console.log(a);//undefind
    var a=2;
    
//  以上代码相当于:
    var a;
    console.log(a);
    a=2;
    

2.举例说明—重复声明变量

    var a=1;
    var a=2;
    console.log(a);//2

    let b=1;
    let b=2;
    console.log(b);//报错,Identifier "b" has already been declared。b已经被声明了

3.举例说明—块级作用域

 {
        var a=1;
        let b=2;
        console.log(b);//2
        {
            console.log(b);//2
        }
 }

    console.log(a);//1
    console.log(b);//报错,b is not defined

const 常量

    1.初始化之后,内部值不可改,必须初始化赋值的问题。
    2.不支持预解析
    3.不允许重复声明
    4.支持块级作用域

const举例说明:

    const a;
    console.log(a);//报错,Missing initializer in const declaration。a没有赋值。

    const b=1;
    b=2;
    console.log(b);//报错, Assignment to constant variable.不能改变常量的值
2.解构赋值

1.对于 对象 解构赋值,变量名要和键名相同,顺序不重要,用{}括起来

(1)变量声明并赋值时的解构

var obj = {
        a: 1,
        b: 2,
        c: "lzf"
    };
var {a,c,b} = obj;
console.log( a,b,c );//1 2 "lzf"

(2)变量声明 后 赋值时的解构

var obj = {
    a: 1,
    b: 2,
    c: "lzf"
};
var a,b,c;
({a,b,c}=obj);
console.log(a,b,c);//1 2 "lzf"

2. 对于 数组 解构赋值,按数组顺序赋值,变量名不重要,用[ ]括起来

var attr=["a","b","c"];
var [x,y,z]=attr;
console.log(x,y,z);// "a","b","c"

3. 默认值配置

var attr=["a",,"c"];
var [x=1,y=2,z=3]=attr;
console.log(x,y,z);//a 2 c

4.占位

var attr=["a","b","c"];
var [x=1,,z=3]=attr;
console.log(x,z);//a c

5.重命名

var obj = {
        a: 1,
        b: 2,
        c: "lzf"
    };
var {a:x,c,b} = obj;
console.log( x,b,c );//1 2 "lzf"

6.重命名并且设默认值

var obj = {
        a: 1,
        b: 2,
        c: "lzf"
    };
var {a:x,c,b,d:z=3} = obj;
console.log( x,b,c,z);//1 2 "lzf" 3
3.解构赋值的应用,交换两个变量的值
    var a=1;
    var b=10;
    [b,a]=[a,b];
    console.log(a,b);//10 1
4.箭头函数

箭头函数: 函数的简短写法

    变体方式
        只有一个参数省略括号
        只有一条语句省略大括号和return
            返回对象 需要 用 () 包起来
    注意
        没有arguments
        不可以作为构造函数
        this绑定

举例一:将函数表达式用箭头函数表示

    let a=function () {};
    a();

//将以上函数表达式 用箭头函数 表示
    let fn=()=>{};
    fn();

举例二:只有一个 参数 省略括号, 没有参数或者1个以上参数都不可以省略

let a=(num) => { console.log(num); };
a(1);//1

//只有一个参数省略括号
let fn=num=>console.log(num);
fn(2);//2

举例三:函数体仅有一条语句,并且有返回值 可以省略 {} 和 return

let a=(a,b) => { return a+b; };
a(1,2);//3

//函数体仅有一条语句并且有返回值, 省略 { } 和 return
let fn=(a,b) => a+b; 
fn(1,3);//4

注意:如果 返回的是一个对象 ,则需要 () 包起来

let a=userName=>{
    return {
        name : userName
    }
}
console.log( a("lzf") );//{name: "lzf"}
//---------- 如果 返回的是一个对象 ,则需要 () 包起来 -------------

let fn=userName=>({
    name : userName
})

console.log( fn("hzq") );//{name: "hzq"}

举例四:没有arguments

    let a=function () {
        console.log( arguments );
    };
    a(1,2,3,4,5);// Arguments(5) [1, 2, 3, 4, 5, callee: ƒ, Symbol(Symbol.iterator): ƒ]

    let fn=()=>console.log( arguments );
    fn(1,2,3,4,5);//报错,arguments is not defined。

举例五:不可以作为构造函数

    let fn=(a,b)=>a+b;
    var f=new fn(); //报错,fn is not a constructor.

举例六:this绑定,箭头函数在哪声明的,this就指向哪

    let fn = () => {console.log( this );};
    fn();//Window

    document.onclick = fn;//Window

    document.onclick = function(){
        setTimeout(function(){
            console.log( this );
        },500)
    }//Window

//    document.onclick = function(){
//        setTimeout( () => {
//            console.log( this );
//        },500)
//    }//#document
5.函数参数

1.默认参数

    let add = function( a,b,c=20 ) {
        return a + b + c;
    };
    
    console.log( add( 1,2,3 ) );//6
    console.log( add( 1,0,2 ) );//3
    console.log( add( 20,10 ) );//50

2.剩余参数

    let a = function(x,y,...r){
        console.log( x,y );
        console.log( r );
    }
    a("a","b","c","d");
    //运行结果:
    //a b
    // ["c", "d"]
    
    let fn = (...arg)=>{
        console.log( arg )
    }
    fn( 1,2,3,4,5 )//[1,2,3,4,5]

    let fn1 = (...arg)=>{
        console.log( ...arg )
    }
    fn1( 1,2,3,4,5 )//1,2,3,4,5
6.扩展运算符
把集合变成参数的形式
    push 数组
    合并数组
    字符串转换数组
    类数组转变为数组
    扩展对象的属性
        
    注意
        如果被扩展的内容中存在项是对象,那么被扩展后依然是地址引用

举例说明一:

    var arr1 = [1,2,3];
    console.log( arr1 );// [1, 2, 3]
    console.log( ...arr1 );// 1 2 3

    var arr2 = [1,2,31,231,23,12,3,123];
    
    console.log( Math.max(2,10) ) ;//10
    console.log( Math.max(...arr2) ) ;//231

举例说明二:push 数组

    var arr = [1,2,3];
    var arr2 = [4,5,6];

    arr.push( ...arr2 );
    console.log( arr );[1, 2, 3, 4, 5, 6]

举例说明三:合并数组

    var arr = [1,2,3];
    var arr2 = [4,5,6];
    console.log( [ ...arr,...arr2 ] );// [1, 2, 3, 4, 5, 6]

举例说明四:字符串转换数组

    var str = "miaov";
    console.log( str.split("") );// ["m", "i", "a", "o", "v"]
    console.log( [...str] );// ["m", "i", "a", "o", "v"]

举例说明五:扩展对象的属性

注意:如果被扩展的内容中存在项是对象,那么被扩展后依然是地址引用。

    var obj = {
        arr : [1,2]
    }
    var c = {
        name : "k",
        ...obj
    }

    c.arr.push( 3 );
    console.log( c );//{name: "k", arr: Array(3)}
    console.log( obj );//{arr: Array(3)}

解决地址引用的方法

    var obj = {
        arr : [1,2],
        name: "k"
    }
//通过 JSON转化为字符串,再转化为对象。
    var c = JSON.parse( JSON.stringify( obj ) );
    c.arr.push(3,4,5,);
    console.log( c );//{arr: Array(5), name: "k"}
    console.log( obj );//{arr: Array(2), name: "k"}

此方法存在问题:

var obj = {
        arr : [1,2],
        name: "k",
        fn: function(){},
        a: undefined,
        b: NaN
    }
    var c = JSON.parse( JSON.stringify( obj ) );
    c.arr.push(3,4,5);
    //c中缺少 fn,a,b
    console.log( c );//{arr: Array(5), name: "k", b: null}
    console.log( obj );//{arr: Array(2), name: "k", fn: ƒ, a: undefined, b: NaN}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/52617.html

相关文章

  • JS基础入门十三)—ES6(二)

    摘要:对象简洁表示法原来写法简洁写法方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。方法按照原始数组元素顺序依次处理元素。注意不会对空数组进行检测。运行结果为举例说明二其中是函数,当没有第二个参数时。有三个参数,并没有深入研究。 1.对象简洁表示法 原来写法 var name = lzf; var gender = male; var fn = fu...

    刘厚水 评论0 收藏0
  • JS基础入门十三)—ES6(二)

    摘要:对象简洁表示法原来写法简洁写法方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。方法按照原始数组元素顺序依次处理元素。注意不会对空数组进行检测。运行结果为举例说明二其中是函数,当没有第二个参数时。有三个参数,并没有深入研究。 1.对象简洁表示法 原来写法 var name = lzf; var gender = male; var fn = fu...

    rozbo 评论0 收藏0
  • JS基础入门十三)— ES6

    摘要:已经被声明了举例说明块级作用域报错,常量初始化之后内部值不可改必须初始化赋值的问题。不支持预解析不允许重复声明支持块级作用域举例说明报错,。解决地址引用的方法通过转化为字符串,再转化为对象。此方法存在问题中缺少 1.var , let , const var 1.预解析(变量提升) 2.可以重复声明变量 let 1.不支持预解析(必须先声明,后使用...

    AaronYuan 评论0 收藏0
  • JS基础入门十三)— ES6

    摘要:已经被声明了举例说明块级作用域报错,常量初始化之后内部值不可改必须初始化赋值的问题。不支持预解析不允许重复声明支持块级作用域举例说明报错,。解决地址引用的方法通过转化为字符串,再转化为对象。此方法存在问题中缺少 1.var , let , const var 1.预解析(变量提升) 2.可以重复声明变量 let 1.不支持预解析(必须先声明,后使用...

    ideaa 评论0 收藏0
  • 机器视觉、模式识别库汇总

    摘要:十开放模式识别项目开放模式识别项目,致力于开发出一套包含图像处理计算机视觉自然语言处理模式识别机器学习和相关领域算法的函数库。 一、开源生物特征识别库 OpenBROpenBR 是一个用来从照片中识别人脸的工具。还支持推算性别与年龄。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、计算机视觉库 OpenCVOpenC...

    habren 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<