關於JavaScript你可能不知道的事 1 – 5

來源:互聯網
上載者:User

1. var關鍵字聲明的變數的範圍是整個函數.

var bar = 'global';function foo () {    console.log(bar); // ==> undefined    var bar = 'local';    console.log(bar); // ==> local}foo();

按照我們的想法, 第一行應該列印global才對. 但是, 事實上, 因為var的範圍是整個函數, 而不是只作用於其後的內容, 所以,我們的函數定義其實和下面的這個定義是等價的

function foo () {    var bar;    console.log(bar);    bar = 'local';    console.log(bar);}

這件事請告訴我們, 最好把var語句都放在函數的頂部, 這樣可以避免不必要的誤解, 以便增加程式的可讀性.

ps:

function foo () {    for (var s=0, i=0; i<10; i++) {        for (var j=0; j<10; j++) {            s = i*j;        }    }    console.log(s); // ==> 81}foo();

以上代碼中, s是在for迴圈內產生的,但並不妨礙它的範圍, 它的範圍還是整個函數.

2. 範圍鏈

3. || 運算子

|| 的求解順序是從左至右的. 並且, 如果左邊的值為真, 那麼整個式子的值就一定是真了. 因此它不會再向右求解.

比如

var i = 1;i || ++i;console.log(i); // ==> 1++i || i;console.log(i); // ==> 2

在對 i || ++i 這個運算式求值時, 系統會從左至右求解, 因此會先看到i, i為1, 轉換成布爾值為真. 因此整個運算式的值為真, 也因此, 不會再執行++i.

|| 運算式還有一個特徵, 它返回的值不一定是真或者假, 而是構成運算式的因子的值. 看代碼你就明白了.

console.log(42 || [1,2]); // ==> 42

實際上, || 運算子完全等價於以下函數

function _or_ (a, b) {    if (a) {        return a;    } else {        return b;    }}

我知道你不相信,但是你可以實驗一下.

於是我們的一些代碼就可以寫的比較順暢了. 比如預設參數, 要達到我們的目的可以這樣寫:

function sayTo(who) {    if (!who) {        who = 'Xiaochi';    }    ...}

但有更簡潔也更易讀的方式:

function sayTo(who) {    who = who || 'Xiaochi';    ...}

ps:

&& 運算子就相當於

function _and_ (a, b) {    if (a)        return b;    else        return a;}

4. 數組的length可寫

給數組的length賦值, 如果值小於當前值, 將會切斷數組, 如果大於當前值, 將會擴充數組.
我不知道這個知識點有什麼用...

var a = [1];a.push(23);console.log(a); // ==> [1, 23]a.length = 5;console.log(a); // ==> [1, 23, undefined, undefined, undefined]

5. 將參數轉化為數組

有的時候希望將函數轉化為數組對象, 這樣就可以利用數組對象的各種方便的方法了.方式如下:

var argsArray = [].slice.apply(arguments);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.