1. 程式人生 > >隨筆:弱型別語言javascript中的一些小坑

隨筆:弱型別語言javascript中的一些小坑

測試1: (未宣告變數自動提升為全域性變數)

test1();
function test1() {
    function setName() {
        name = '張三'; // 此處沒有var宣告,提升至全域性
    }
    setName();
    console.log(name);// '張三'
}
測試2: (函式內部區域性變數的變數提升)
test2();
function test2() {
    var a = 1;
    function haha() {
        console.log(a);
        var a=1;
    }
    haha(); // undefined
}
測試3: (給window物件掛載屬性,作用域提升至全域性)
test3();
function test3() {
    var b=2;
    function hehe(){
        window.b = 3; // 此時的b為全域性變數的b
        console.log(b); // 此時的b是函式test3()裡的b為2
    }
    hehe();
}
測試4: (變數提升,區域性作用域的綜合)
test4();
function test4() {
    c = 5;
    function heihei() {
        var c;
        window.c = 3;
        console.log(c); // 函式heihei內的c為undefined
        console.log(window.c); // 3
    }
    heihei();
}
測試5: (陣列的長度的問題)
test5();
function test5() {
    var arr = [];
    arr[0] = '1';
    arr[1] = 'b';
    arr[9] = 100;
    console.log(arr.length); // 10
}
測試6: (等與全等的問題)
test6();
function test6() {
    var a = 1;
    console.log(a++); // 1
    console.log(++a); // 3
    console.log(null == undefined); // true
    console.log(null === undefined);// false
    console.log(1 == "1"); // true
    console.log(1 === "1"); // false
    console.log(NaN === NaN) // false;
}
測試7: (型別相關)
test7();
function test7() {
    console.log(typeof 1); // number
    console.log(typeof "hello"); // string
    console.log(typeof typeof "hello"); // string
    console.log(typeof !!"hello"); // boolean
    console.log(typeof /[0-9]/); // object
    console.log(typeof {}); // object
    console.log(typeof null); // object
    console.log(typeof undefined); // undefined
    console.log(typeof [1, 2, 3]); // object
    console.log(toString.call([1, 2, 3])); // [object Array]
    console.log(typeof function () {}); // function
}
測試8: (parse函式相關)
test8();
function test8() {
    console.log(parseInt(3.14));// 3
    console.log(parseFloat('3.01aaa'));// 3.01
    console.log(parseInt('aa1.2'));// NaN;
    console.log(parseInt('8.00',16));// 8
    console.log(parseInt('0x8',16));// 8
    console.log(parseInt('8.00',10));// 8
    console.log(parseInt('010',8));// 10
    console.log(parseInt('1000',2));// 1000
}
測試9: (變數提升,函式提升與return後阻斷執行)
test9();
function test9() {
    function bar() {
        return foo;
        foo = 10;
        function foo(){};
    }
    console.log(typeof bar()); // 'function'
}
測試10: (作用域與函式提升)
test10();
function test10() {
    var foo = 1;
    function bar() {
        foo = 10;
        console.log(typeof foo);
        return;
        function foo(){};
    }
    bar(); // number
    console.log(foo); // 1
}
測試11: (變數提升與函式提升)
test11();
function test11() {
    console.log(typeof a); // function
    var a = 3;
    function a(){};
    console.log(typeof a); // number
}
測試12: (arguments物件)
test12();
function test12() {
    function foo(a) {
        console.log(a);// 1
        arguments[0] = 2;
        console.log(a);// 2
        console.log(arguments.length);// 3
    }
    foo(1,3,4);
}
測試13: (中間函式名,直接使用會報錯)
test13();
function test13() {
    var foo = function bar(name) {
        console.log("hello " + name);
    }
    foo("world");
    console.log(bar); // 此處會報錯 bar is not defined
}
測試14: (在js中定時器,最後執行,涉及到的知識點是事件迴圈和事件佇列)
test14();
function test14() {
    function foo() {
        console.log('I am foo');
    }
    console.log('正常執行');
    setTimeout((function(){
        console.log('定時器大灰狼來啦');
    }),0);
    foo();
}

相關推薦

隨筆型別語言javascript一些

測試1: (未宣告變數自動提升為全域性變數) test1(); function test1() { function setName() { name = '張三'; // 此處沒有var宣告,提升至全域性 } setName();

JavaScript是一種型別語言,有什麼優點和缺點

弱型別語言都是指令碼語言,在執行時確定值,所以跟編譯不相關。 弱型別語言記憶體佈局上一般是個Union結構,並且要包含一個型別欄位,因為計算機底層還是要知道明確的型別資訊。強型別語言是直接操縱記憶體

隨筆關於 FastAdmin ueditor 外掛 的 rand mt_rand mt_getrandmax 問題

隨筆:關於 FastAdmin ueditor 外掛 中的 rand mt_rand mt_getrandmax 問題 問題來源 一位小夥伴在使用 Ueditor 外掛時出錯,因為用的是 php7.1,所以看到 rand 第二個引數是 100000000,結果 php7.1 報錯了。 但是老大沒發現有錯誤

型別語言為何不堪大用

弱型別語言為何不堪大用 最近一直用node.js python 其靈活性,庫和包之多也讓人驚喜萬分。如此美好的東西不何不堪大用,原因也是他的優點,它的靈活性加上人的懶惰性就是它不堪大用的根本原因。 拿來主義向來是程式設計界裡常用的修練方法,但是拿來的多,消化的少。由於多

靜態型別JavaScript 是一種負擔嗎?

原文作者:UC 國際研發 Randy 寫在最前:歡迎你來到“UC國際技術”公眾號,我們將為大家提供與客戶端、服務端、演算法、測試、資料、前端等相關的高質量技術文章,不限於原創與翻譯。 最近我在公司的專案中遇到很多由於型別不匹配所導致的不可預估的問題。比如說,我們的程式產生了一個純數字的 unique

型別語言與強語言型別

弱型別語言允許將一塊記憶體看做多種型別。比如直接將整型變數與字元變數相加。C and C++ 是靜態語言,也是弱型別語言;Perl and PHP 是動態語言,但也是弱型別語言。強型別語言在沒有強制型別轉化前,不允許兩種不同型別的變數相互操作。Java、C# 和 Python

如何理解PHP是型別語言

首先,我們一般說php變數型別8種標量型別:布林boolean,整形integer,浮點float,字元string複雜型別:陣列array,物件object特殊型別:資源resource,空nullphp底層所有變數都是以結構體zval來實現其中refcount__gc和i

python是強型別語言還是型別語言

Python屬於強型別的動態指令碼語言 強型別:不予許不同型別相加 動態:不使用顯示資料宣告型別,且確定一個變數的型別是第一次給他賦值的時候 指令碼語言:一般也是解釋性語言,裕興程式碼只需要一個直譯器,不需要編譯

python 型別語言常見的錯誤

弱型別語言常見的錯誤。比如變數的型別寫錯了,如dictionary的key 的型別是class,但是你給他一個int,不會報錯,直到執行的時候才會報錯。或許有強大的IDE可以檢查出這種錯誤。 ps: eclipse + pydev 這個外掛不錯。 在python用上單元測

型別語言型別語言

 編譯型和解釋型 我們先看看編譯型,其實它和組合語言是一樣的:也是有一個負責翻譯的程式來對我們的原始碼進行轉換,生成相對應的可執行程式碼。這個過程說得專業一點,就稱為編譯(Compile),而負責編譯的程式自然就稱為編譯器(Compiler)。如果我們寫的程式程式碼都包含在

JavaScript一些變態的面試題

console.log(parseInt("116",16)); var aaa = [1,2,3,4,16,17,22]; var bb = aaa.map(parseInt);//parseInt 只接受兩個兩個引數 string,

動態語言,靜態語言,強型別語言型別語言的區別

靜態語言 靜態語言是在編譯時期就檢查資料型別的,所以必須在宣告變數的時候指定資料型別,否則編譯會不通過。例如C/C++,Java等 動態語言 動態語言是在執行時期才檢查資料型別的,所以在宣告變數的時候可以先不指定資料型別,因為在執行期間變數的資料型別是可變

徹底搞清楚javascript的require、import和export

開發 括號 async tel accept bound tab and 自然 為什麽有模塊概念 理想情況下,開發者只需要實現核心的業務邏輯,其他都可以加載別人已經寫好的模塊。 但是,Javascript不是一種模塊化編程語言,在es6以前,它是不支持”類&

型別語言、強型別語言

一、什麼是弱型別語言、強型別語言? 強型別和弱型別主要是站在變數型別處理的角度進行分類的。 強型別是指不允許隱式變數型別轉換,弱型別則允許隱式型別轉換。 所以,關鍵在於變數資料型別的轉換。   二、什麼叫隱式型別轉換? 隱式是指原始碼中沒有明顯的型別轉換程式碼,也就是說,一個變數,你可以直接給他賦

面試官能解釋一下javascriptbind、apply和call這三個函式的用法嗎

一.前言     不知道大家還記不記得前一篇文章:《面試官:能解釋一下javascript中的this嗎》   那今天這篇文章雖然是介紹javascript中bind、apply和call函式,但是多少也和this有點關聯。   假如在前面那場面試末尾,面試官不依不饒繼續問你javascr

Python 到底是強型別語言,還是型別語言

## 0、前言 我在上一篇文章中分析了 [為什麼 Python 沒有 void 型別](https://mp.weixin.qq.com/s/wWCgwMofSvKBbi3gZLxsAQ) 的話題,在文章釋出後,有讀者跟我討論起了另一個關於型別的問題,但是,我們很快就出現了重大分歧。 我們主要的分歧就在於

java一些知識和面試問題

() set 返回值 初始 cep 裝箱 聲明 數據 允許 抽象類的總結幾點: · 抽象類與普通類相比最大的不同只是在於抽象類之中存在有抽象方法,所以在抽象類之中依 然可以定義屬性、構造方法等 · 抽象類聲明時不允許使用 final,抽象類必須要求有子類,

python一些的知識點

asc byte 知識 error nbsp 中一 文件 users cte 1:只有數字,字符串有小數據池 小數據池:在一定範圍內,即使分別給兩兩個變量賦相等的值,它們的id地址還會是相同的 數字範圍: -5 ~ 256 字符串:1:不能有特殊字符     2:str*

javascript一些知識

每一個 www. lean http 適應 and 左移 和數 邏輯 把外部javascript文件放在瀏覽器的後面,可以提高瀏覽器的加載速度defer="defer",等到瀏覽器加載完畢後才執行腳本,只對外部腳本鏈接有效使用var定義的變量是局部變量,

Redis安裝過程出現的一些

gcc安裝好 可以通過 gcc -v 檢視 再次make 還會報錯 cd src && make all make[1]: Entering directory `/opt/redi