摘要:已經被聲明了舉例說明塊級作用域報錯,常量初始化之后內部值不可改必須初始化賦值的問題。不支持預解析不允許重復聲明支持塊級作用域舉例說明報錯,。解決地址引用的方法通過轉化為字符串,再轉化為對象。此方法存在問題中缺少
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" 33.解構賦值的應用,交換兩個變量的值
var a=1; var b=10; [b,a]=[a,b]; console.log(a,b);//10 14.箭頭函數
箭頭函數: 函數的簡短寫法
變體方式 只有一個參數省略括號 只有一條語句省略大括號和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) // }//#document5.函數參數
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,56.擴展運算符
把集合變成參數的形式 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}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/52617.html
摘要:對象簡潔表示法原來寫法簡潔寫法方法返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值。方法按照原始數組元素順序依次處理元素。注意不會對空數組進行檢測。運行結果為舉例說明二其中是函數,當沒有第二個參數時。有三個參數,并沒有深入研究。 1.對象簡潔表示法 原來寫法 var name = lzf; var gender = male; var fn = fu...
摘要:對象簡潔表示法原來寫法簡潔寫法方法返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值。方法按照原始數組元素順序依次處理元素。注意不會對空數組進行檢測。運行結果為舉例說明二其中是函數,當沒有第二個參數時。有三個參數,并沒有深入研究。 1.對象簡潔表示法 原來寫法 var name = lzf; var gender = male; var fn = fu...
摘要:已經被聲明了舉例說明塊級作用域報錯,常量初始化之后內部值不可改必須初始化賦值的問題。不支持預解析不允許重復聲明支持塊級作用域舉例說明報錯,。解決地址引用的方法通過轉化為字符串,再轉化為對象。此方法存在問題中缺少 1.var , let , const var 1.預解析(變量提升) 2.可以重復聲明變量 let 1.不支持預解析(必須先聲明,后使用...
摘要:已經被聲明了舉例說明塊級作用域報錯,常量初始化之后內部值不可改必須初始化賦值的問題。不支持預解析不允許重復聲明支持塊級作用域舉例說明報錯,。解決地址引用的方法通過轉化為字符串,再轉化為對象。此方法存在問題中缺少 1.var , let , const var 1.預解析(變量提升) 2.可以重復聲明變量 let 1.不支持預解析(必須先聲明,后使用...
摘要:十開放模式識別項目開放模式識別項目,致力于開發出一套包含圖像處理計算機視覺自然語言處理模式識別機器學習和相關領域算法的函數庫。 一、開源生物特征識別庫 OpenBROpenBR 是一個用來從照片中識別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計算機視覺庫 OpenCVOpenC...
閱讀 2465·2021-09-29 09:34
閱讀 3301·2021-09-23 11:21
閱讀 2494·2021-09-06 15:00
閱讀 1123·2019-08-30 15:44
閱讀 2024·2019-08-29 17:23
閱讀 2996·2019-08-29 16:44
閱讀 3052·2019-08-29 13:13
閱讀 1932·2019-08-28 18:12