弱類型語言javascript開發(fā)中的一些坑實例小結【變量、函數、數組、對象、作用域等】
本文實例講述了弱類型語言javascript開發(fā)中的一些坑。分享給大家供大家參考,具體如下:
測試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后阻斷執(zhí)行)
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中定時器,最后執(zhí)行,涉及到的知識點是事件循環(huán)和事件隊列)
test14();
function test14() {
function foo() {
console.log('I am foo');
}
console.log('正常執(zhí)行');
setTimeout((function(){
console.log('定時器大灰狼來啦');
}),0);
foo();
}
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關于JavaScript相關內容可查看本站專題:《JavaScript操作DOM技巧總結》、《JavaScript頁面元素操作技巧總結》、《JavaScript事件相關操作與技巧大全》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript錯誤與調試技巧總結》
希望本文所述對大家JavaScript程序設計有所幫助。
相關文章
uniapp微信小程序底部動態(tài)tabBar的解決方案(自定義tabBar導航)
tabBar如果應用是一個多tab應用,可以通過tabBar配置項指定tab欄的表現,以及tab切換時顯示的對應頁,下面這篇文章主要給大家介紹了關于uniapp微信小程序底部動態(tài)tabBar的解決方案,需要的朋友可以參考下2022-04-04

