變數&&語法
函式體內區域變數優先級高于全域變數
函式內的變數宣告將提升至函式體頂部,同時在原位置完成初始化var宣告
在for回圈中使用var宣告變數時,該變數的作用域為for回圈所屬函式,
var a=[];
for(var i = 0;i<10;i++){
var q = i;
a[i]=function(){console.log(q)}
}
a[0]()
/*其中,由于for回圈并不是一個函式體,所以for回圈中定義的變數q和i是作用域for回圈所在的函式體,和a同級,
i++ 和 q=i 并不是重新定義變數,只是重復賦值,最侄訓圈結束,i = 10,q=9; */
- let宣告的變數,只在let所在的代碼塊有效果
1. var a=[];
2. for(let i = 0;i<10;i++){
3. ley q = i;
4. a[i]=function(){console.log(q)}
5. }
6. a[6]()
//這里會輸出 6 let宣告的變數僅在塊級作用域有效,所以這里的i只在本輪回圈有效果,每次回圈的i其實都是一個新的變數
function 宣告
/*定義一個函式 */
//one:
function mysqrt(x){//使用此宣告則函式名與函式初始化塊均“提前”到腳本或函式的頂部
return Math.sqrt(x*x);
}
//two
var mysqrt = function(x){return Math.sqrt(x*x);}//使用此宣告則僅有變數宣告“提前”到腳本或函式的頂部,初始化體仍在原來的位置
for-in
- for-in 會跳過null、undefined
- 只遍歷可列舉的(包含繼承的屬性名)
/*使用for-in 變數陣列元素 */
var o = {x:1,y:2,z:3}
var a = [],i = 0//宣告一個陣列與一個變數
for(a[i++]in o);
continue,break
帶標簽的continue,break作用相同,均是跳轉到指定回圈(均不得跳轉至所屬函式邊界,即所屬函式外)
mainloop: while(token!=null){
continue mainloop;
}
mainloop: while(token!=null){
break mainloop;//mainloop為自定義標記
}
例外處理
throw 拋出例外
try{/*可能出現例外的代碼*/}
catch(){/*對例外的處理*/}
finally{/*不管發不發生例外都執行的陳述句*/}
with陳述句
檢索物件串列,決議變數名
/*用于簡化代碼*/
with(document.forms[0]){
name.value=https://www.cnblogs.com/MR---Zhao/p/"";
address.value="";
email.value="";
}
/*簡化前*/
var f = document.form[0];
f.name.value="";
f.address.value="";
f.email.value="";
運算子
===嚴格相等
- 比較程序中沒有型別的轉換,兩個值型別不同則其不等
- 值為null或undefined則其不等
- 均是相同的布林值則相等
- 其中一個值為NaN則不等**
==
- 值為null或undefined則其相等
- 兩個不同型別的值轉換后相等則其相等(如:true轉換為1 false轉換為0 再進行比較)
in
- 左運算元是一個字串或可以轉換為字串,有運算元是一個物件
- 如右側物件包含左側運算元,運算式回傳true
var a = {x:a}
"x" in a; //true
instanceof
- 如左側物件是右側類的實體,運算式將回傳true
var mynew = new Date();
mynew instanceof Date;//回傳true
null、undefined
- null是一個特殊物件(非物件),多用來表示字串、數字、物件得無值,
- undefined(未定義) 表示屬性或元素不存在
- === 可區分null與undefined,而==則不行
型別轉換
x+""//等價于String(x)
+x//等價于Number(x)
!!x//等價于Boolean(x)
物件向字串轉換
有toString則通過此方法將其變為字串,無toString則通過ValueOf,二者均無則報錯,
空陣列向數值轉換結果為0
附表:語法||運算子||型別轉換

** 待續 **
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/57403.html
標籤:JavaScript
上一篇:前端常用60余種工具方法
