JavaScript你所不知道的困惑(1)

來源:互聯網
上載者:User

困惑一:

先看一個例子:

function test(){message = "hi";}test();alert(message);
會輸出字串“hi"

在函數內部使用var定義的變數是局部變數,省略var操作符的變數是全域變數。

困惑二:

alert(undefined == null)
結果是”true"

我們知道在js中分為基本類型和參考型別,基本類型包括number、string、boolean、undefined、null.如果一個基本類型沒有初始化則會是undefined類型,而null代表null 指標。實際上undefined值是派生自null的,因此返回true.

困惑三:

alert(isNaN(NaN));   //truealert(isNaN(10));    //falsealert(isNaN("10"));    //false  自動類型轉換alert(isNaN("blue"));   //truealert(isNaN(true));    //false  自動類型轉換
NaN指非數值(Not a Number)是一個特殊的數值,在ECMAScript中,任何數值除以0返回NaN,而且任何涉及NaN的操作都會返回NaN. NaN與任何值不等,包括自身。

alert(NaN == NaN);  // false 
困惑四:

for(var propName in window){document.write(propName);}
For - in 語句是一種精準的迭代語句,可以用來枚舉對象的屬性,類似於java中的for( String s : String[])

困惑五:

var qs = location.search.substring(1);var hostName = location.hostname;var url = location.href;//等價於下面with(location){var qs = search.substring(1);var hostName = hostname;var url = href;}
with語句的作用是將代碼的範圍設定到一個特定的對象中,主要目的是為了簡化多次編寫同一個對象的工作。

困惑六:

function howManyArgs(){alert(arguments.length);}howManyArgs("String", 45);  //2howManyArgs();  //0howManyArgs(12);   //1
ECMAScript中的參數在內部是用一個數組來表示的,函數接收到的始終都是這個數組,而不關心數組中包含哪些參數(如果沒有參數的話)。

命名的參數只提供便利,但不是必須的。再看下面例子

function doAdd(num1, num2){arguments[1] = 10;alert(arguments[0] + num2);}
因為arguments對象中的值會自動反映到對應的具名引數,所以num2會變成10,但是他們的記憶體空間是獨立的(不是引用),另外arguments對象的長度是由傳入的參數個數決定的,不是由定義函數時的具名引數個數決定的。

困惑七:

for(var i=0; i<10; i++){}alert(i);   //輸出結果為 10
JavaScript沒有塊級範圍。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.