20161230作業(yè)

以下代碼的輸出結果是? 為什么

var a = 1;
console.log( a+++a );  // 輸出結果為 3;
原因:
++的優(yōu)先級大于+;a+++a 相當于`a++`  + `a`; 又因為a++是先運算后自增,所以1+2=3;

以下代碼的輸出結果是? 為什么

var a = 1;
var b = 3;
console.log( a+++b ); // 輸出結果為4;
原因:
和問題1同理++的優(yōu)先級大于+,相當于`a++` + `b`; 所以1+3= 4;

void 0undefined在使用場景上有什么區(qū)別?

一直以來, undefined都不是JavaScript的關鍵字或保留字,這意味著我們可以修改window.undefined的值,由于undefined會被頻繁調用作為比較運算的操作數(shù)等原因,修改undefined的值是有弊端的,在ES5規(guī)范之后,window.undefined被定義為不可寫、不可配置的屬性。
在js中使用void 0代替undefined是為了兼容性以及預防代碼的不規(guī)范(自己修改undefined的值)。

undefined
變量聲明后未賦值,則變量會被自動賦值為undefined;
函數(shù)中定義了一些形參,如果傳入的實參少于預定義的形參,那么有一些形參就會匹配不到實參,繼而會被自動賦值為undefined;
沒有返回值的函數(shù),默認返回undefined;

void運算符
void 運算符后面接一個表達式,無論表達式的內容是什么,只要跟在void 之后都會被調用執(zhí)行,執(zhí)行完畢之后void操作符返回undefined;
使用void的三種用處:
1.生成undefined
使用void 0生成undefined,既減少了在原形鏈上查找window.undefined的時間,也避免了誤用被修改過的undefined。

function checkLogin (loginName) {   
               if (loginName === void 0) {       
                            console.log('Wrong!');  
       } 
}
checkLogin();  // => 'Wrong!'

2.讓函數(shù)立即執(zhí)行;
運算符和函數(shù)組合使用,可以讓函數(shù)立即執(zhí)行。實際上,有許多運算符可以讓函數(shù)立即執(zhí)行,比如 +、-、!、~ 以及本文提到的 void 等運算符。此外,還有最常見的小括號(不是運算符,會改變優(yōu)先級):

(function(){
    console.log('立即執(zhí)行');
})();
// => '立即執(zhí)行'

3.充當javascript:協(xié)議的url;
對于網頁中的點贊、收藏等按鈕,如果使用 a 標簽來實現(xiàn)的話,往往會用到 href="javascript:void(0)" 等類似的代碼,這段代碼的作用點擊鏈接時讓頁面不跳轉。
href="javascript:void(0)" 中,使用了一個以 javascript: 協(xié)議開頭的 URI,瀏覽器默認會對冒號后面的代碼求值,然后將結果顯示在新的頁面,但有一種情況例外,如果結果是 undefined,瀏覽器就不會刷新頁面渲染新值了。
javascript: 協(xié)議聲明了 URL 的主體是任意的 javascript 代碼,由 javascript 解釋器編譯執(zhí)行,通常使用 javascript:URL 執(zhí)行某些不改變當前頁面文檔的代碼,要做到這一點,必須確保 URL 的最后一條語句沒有返回值,比如使用void 0。

以下代碼輸出結果是? 為什么

var a = 1, b = 2, c = 3;
var val = typeof a + b || c > 0;
console.log(val) // 輸出結果為 number2;
原因:
typeof的優(yōu)先級相當?shù)母?,比加減乘除等都高,在上面題中優(yōu)先級從大到小排序為,typeof、+、>、||、=;
按照優(yōu)先級的先后來運算,得到typeof a為number,+b為2,c > 0 為true; 又因為運算符或||只要左邊為
true就會返回左邊的值,左邊的值為false右邊的值為true時會返回右邊的值,兩邊為false時會返回false。
而 題目中number2轉換為booler值為true,所以最終結果為number2。


var d = 5; 
var date = d == 5 && console.log('bb')
console.log(data)  // 輸出結果為undefined;
原因:
&&的左邊為true時,輸出右邊的值,&&的左邊為false時輸出左邊。優(yōu)先級從大到小== 、&& 、=  ; 先算d == 5為true,再算cosole.log('bb')返回值為undefined(console.log(‘bb’)== undefined //為true)所以輸出&&右邊的值為undefined,最后賦值給data。
所以最終輸出結果為undefined。


var data2 = d = 0 || console.log('haha')
console.log('data2') //輸出結果為undefined
原因:
當運算符||左邊值為false時,會返回右邊的值;當左邊值為true時,會返回左邊的值。優(yōu)先級從大到小||、=;先算console.log('haha')其返回值為undefined; 而運算符||右邊有兩個=,運算符=是右結合的,所以先算d = 0,其轉換為布爾值為false;最后把返回的右邊的值undefined賦值給data2。

var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) //輸出結果為2
原因:
題中優(yōu)先級從大到小為()、!、+、=;第一步算:(!"world", !!"from here!!"),其里面!優(yōu)先級大于逗號運算符,且!是右結合,所以 !!"from here!!"相當于!(!"from here!!")其返回值為true;而!"world"返回值為false,(而逗號運算符用于對兩個表達式求值,并返回后一個表達式的值。)所以第一步返回值為true。第二步算:!!"Hello",相當于!(!"Hello"),第二部返回值為true。第三部算true+true,又因為當+兩邊的運算數(shù)是布爾值時,true會轉為1,false會轉換為0,因此第三步返回值為2。最后將2賦值給x。所以最終結果為2。

遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方

var arr = [3,4,5]
// todo..
//輸出9,16,25

代碼:
var arr = [3,4,5];
for(var i = 0; i < arr.length; i++){
      console.log(arr[i]*arr[i]);
}
Paste_Image.png

遍歷 JSON, 打印里面的值 (難度**)

var obj = {
    name: 'hunger',
    sex:    'male',
    age:  '28'
}
// todo...
//輸出name: hunger, sex: male, age:28

代碼:
var obj = {
  name: 'hunger',
  sex: 'male',
  age: '28',
}
for(var key in obj) {
  console.log( obj[key] );
}

Paste_Image.png

文章著作權歸饑人谷_sunny和饑人谷所有,轉載須說明來源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容