1 componentDidMount() { 2 3 // 建立一個小明對象 4 let xiaoming = {} 5 6 // 給小明這個對象添加屬於他的屬性 7 xiaoming.name = 'XiaoMing' 8 xiaoming.age = 20 9 xiaoming.height = 180 10 11 // 給小明這個對象添加屬於他的方法 12 xiaoming.eat = () => {console.log('eat')} 13 xiaoming.learn = () => {console.log('learn RN')} 14 15 // 獲取小明的名字 16 console.log(xiaoming.name) 17 18 // 調用小明本身的方法 19 xiaoming.eat() 20 xiaoming.learn() 21 22 // 打印小明對象看看效果吧 23 console.log(xiaoming) 24 }
日誌es6
1 (function() { 2 var varVariable 3 let letVariable 4 console.log(varVariable) // 輸出 undefined 5 console.log(letVariable) // 輸出 undefined 6 }())
1 (function() { 2 console.log(varTest) // 輸出 undefined 3 console.log(letTest) // 輸出 undefined 4 5 var varTest = 'varTest' 6 let letTest = 'varTest' 7 }())
1 (function() { 2 3 var varTest = 'test var OK.' 4 let letTest = 'test let OK.' 5 6 var varTest = 'varTest changed.' 7 let letTest = 'letTest changed.' // 直接報錯:SyntaxError:Identifier 'letTest' has already been declared 8 9 console.log(varTest) // 輸出 varTest changed,覆蓋掉了以前的值:test 10 // var OK. 11 console.log(letTest) 12 }())
1 var xx 2 3 const test = () => { 4 var aa // 聲明一 5 let bb //聲明二 6 this.cc //聲明三 7 8 // 聲明一局部代碼塊 9 { 10 let dd //聲明四 11 } 12 }
區別數組
- let 聲明的變量做用域爲某個代碼塊。而代碼塊的長度可大可小。也就是說,當按聲明二的方式聲明一個變量時,該變量的做用範圍於爲整個function語句。當按聲明四方式聲明一個變量時,該變量的做用範圍爲局部的代碼塊。
- var 聲明的變量做用域爲整個函數體(當按聲明一的方式聲明變量時);當var變量聲明在函數外,該var變量的做用域爲整個js文件週期(全局做用域)。
- 簡單地說,用this聲明的變量做用域也是全局的。若是實例化test函數 var p=new test() 那麼用p能訪問test函數內的哪些變量呢?答案是隻有cc 。實際上this聲明的變量是做用於上下文的。
1 const breakfast = () => { 2 return {dessert: '🎂', drink: '🍵', fruit: '🍎'} 3 } 4 5 let {dessert: dessert, drink: drink, fruit: fruit} = breakfast() 6 7 console.log(dessert) // 輸入 🎂 8 console.log(drink) // 輸入 🍵 9 console.log(fruit) // 輸入 🍎
咱們能夠將上面的解構對象簡化dom
1 const breakfast = () => { 2 return {dessert: '🎂', drink: '🍵', fruit: '🍎'} 3 } 4 5 let {dessert, drink, fruit} = breakfast() 6 7 console.log(dessert) // 輸入 🎂 8 console.log(drink) // 輸入 🍵 9 console.log(fruit) // 輸入 🍎
1 const breakfast = () => { 2 return [🎂, 🍵, 🍎] 3 } 4 5 var tmpArr = breakfast() 6 dessert = tmpArr [0] 7 drink = tmpArr [1] 8 fruit = tmpArr [2] 9 10 console.log(dessert) // 輸出 🎂 11 console.log(drink) // 輸出 🍵 12 console.log(fruit) // 輸出 🍎
1 const breakfast = () => { 2 return [🎂, 🍵, 🍎] 3 } 4 let [dessert, drink, fruit] = breakfast() 5 6 console.log(dessert) // 輸出 🎂 7 console.log(drink) // 輸出 🍵 8 console.log(fruit) // 輸出 🍎
1 const breakfast = (dessert, drink, {locaiotn, restaurant} = {}) => { 2 console.log(dessert, drink, locaiotn, restaurant) // 輸出:🍰 🍺 濟南 星巴克 3 } 4 5 breakfast ('🍰', '🍺', {locaiotn: '濟南', restaurant: '星巴克'})
解構參數與通常的參數不一樣點在於,它是一個必需要傳值的參數,若是不傳,則會引起程序報錯:函數
function setCookie(name, value, {secure, path, domain, expires}) { console.log(expires); //其餘代碼 } setCookie('type', 'js'); // Uncaught TypeError: Cannot destructure property `secure` of 'undefined' or 'null'.
緣由是爲何呢?是由於解構參數存在的函數,當咱們在調用setCookie()的時候,函數內部實際上是這樣的:
function setCookie(name, value, options) { let {secure, path, domain, expires} = options; //這是引擎背後作的 console.log(expires); //其餘代碼 }
用於結果的對象若是是null或者undefined,則程序會報錯,因此當咱們不給解構參數傳值的時候,會引起了程序報錯。
爲了解決以上問題,咱們須要在定義函數的時候,給解構參數提供默認值:ui
function setCookie(name, value, {secure, path, domain, expires} = {}) {} setCookie('id', 'mike'); //有了默認值,便不會報錯 {} 爲解構參數的默認值
給解構參數屬性設置默認值this
let defaultOptions = { secure: true, path: '/example', domain: 'test', expires: 60 }; function setCookie(name, value, { secure = defaultOptions.secure, path = defaultOptions.path, domain = defaultOptions.domain, expires = defaultOptions.expires } = defaultOptions) { console.log(secure); //true console.log(path); //example console.log(domain);//test console.log(expires);//30 } setCookie('id', 'mike', {path: '/example', domain: 'test', expires: 30});
給解構參數的屬性設置默認值和通常對象的解構設置默認值是同樣的,也是在用等號=給屬性賦值。
這裏特別要注意的是,若是隻是單純地給解構參數的屬性設置默認值,而不給整個解構參數設置默認值,依然不能解決相似於setCookie('id', 'mike')
這樣不傳參所引起的代碼報錯問題,因此不要忘了給整個解構參數設置默認值(也就是這個例子裏面的= defaultOptions
)。lua