JavaScript數(shù)據(jù)類型
在 JavaScript 中的數(shù)據(jù)類型:
string(字符串)颜及、number(數(shù)字祸憋,NaN
也屬于其)、Boolean(邏輯)逻悠、object(對象元践,包括Object,Array<數(shù)組>蹂风,Date<日期>卢厂,null<空對象>)、function(函數(shù))惠啄、慎恒、undefined(未設置)
ps:JavaScript 擁有動態(tài)類型。這意味著相同的變量可用作不同的類型
- 聲明變量類型
當聲明新變量時撵渡,可以使用關鍵詞 "new" 來聲明其類型:
var y= new Boolean; - typeof 操作符:用于返回變量或表達式類型
null與undefined:均表示什么都沒有融柬,且都可以用來清空變量;null類型為object趋距,undefined類型為undefined - constructor屬性:返回所有變量的構造
"john".constructor 得到
function String() { [native code] }
因此可以用來判斷typeof無法判斷區(qū)分的Array和Date:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = isArray(fruits);
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
個人目前理解的是:可以用isArray()判斷是否為數(shù)組粒氧,而該函數(shù)的代碼塊是以constructor為核心的。
JavaScript 類型轉換
方法:1.通過使用 JavaScript 函數(shù)节腐;2.通過 JavaScript 自身自動轉換
- 轉化為字符串:
- String(x)外盯,適用于任何類型的數(shù)字,字母翼雀,變量饱苟,表達式
- x.toString Boolean和Date()也適用,其他不清楚
- 轉化為數(shù)字
Number() - 字符串轉化為數(shù)字狼渊,包含數(shù)字轉化為數(shù)字箱熬,空字符轉化為0,其他字符(如"99 88")轉化為NaN(不是個數(shù)字)
- Boolean中true轉化為1狈邑,false轉化為0
- 日期轉化為數(shù)字
d = new Date(); 法一
Number(d)
d = new Date(); 法二
d.getTime()
Operator + 也可用于將變量轉換為數(shù)字
JavaScript 錯誤 - throw城须、try 和 catch
try 語句測試代碼塊的錯誤;catch 語句處理錯誤米苹;throw 語句創(chuàng)建自定義錯誤
JavaScript 拋出(throw)錯誤:當錯誤發(fā)生糕伐,事情出問題時,JavaScript 引擎通常會停止驱入,并生成一個錯誤消息赤炒,稱之為JavaScript 將拋出一個錯誤氯析。
- JavaScript try 和 catch
try語句中的代碼在執(zhí)行時會對其進行錯誤檢測,catch語句定義當try代碼塊發(fā)生錯誤時莺褒,所執(zhí)行的代碼塊掩缓。
try與catch在JavaScript中總是成對出現(xiàn)。
try {
//在這里運行代碼
} catch(err) {
//在這里處理錯誤
}
var txt="";
function message()
{
try {
adddlert("Welcome guest!"); //alert拼錯為adddlert
} catch(err) {
txt="本頁有一個錯誤遵岩。\n\n"; //\n用于換行
txt+="錯誤描述:" + err.message + "\n\n";//用于顯示try代碼塊中的錯誤信息
txt+="點擊確定繼續(xù)你辣。\n\n";
alert(txt);
}
}
- Throw語句
用于創(chuàng)建或拋出異常。如果把 throw 與 try 和 catch 一起使用尘执,那么您能夠控制程序流舍哄,并生成自定義的錯誤消息。
throw exception
異程芏В可以是 JavaScript 字符串表悬、數(shù)字、邏輯值或對象丧靡。
exception
為后面的err
的內容蟆沫,即錯誤信息
JavaScript正則表達式(regex或RE)
/正則表達式主體/修飾符(可選)
search() 和 replace()
search() 方法 用于檢索字符串中指定的子字符串,或檢索與正則表達式或字符串相匹配的子字符串温治,并返回子串的起始位置饭庞。
replace() 方法 用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式或字符串匹配的子串熬荆。
search() 方法
使用正則表達式搜索 "Runoob" 字符串舟山,且不區(qū)分大小寫
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);
使用字符串作為參數(shù),字符串參數(shù)會轉換為正則表達式,區(qū)分大小寫
var str = "Visit Runoob!";
var n = str.search("Runoob");
輸出為數(shù)字,即字串的起始位置replace()方法
同上
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");
正則表達式使得搜索功能更加強大(如實例中不區(qū)分大小寫)卤恳。
正則表達式模式和修飾符詳見http://www.runoob.com/js/js-regexp.html
使用 RegExp 對象
在 JavaScript 中累盗,RegExp 對象是一個預定義了屬性和方法的正則表達式對象。
- 使用 test()
est() 方法用于檢測一個字符串是否匹配某個模式突琳,如果字符串中含有匹配的文本幅骄,則返回 true,否則返回 false - 使用exec()
exec() 方法用于檢索字符串中的正則表達式的匹配,該函數(shù)返回一個數(shù)組本今,其中存放匹配的結果。如果未找到匹配主巍,則返回值為 null冠息。
JavaScript 調試(console)
- console.log() 方法
可以使用 console.log() 方法在調試窗口上打印 JavaScript 值 - 設置斷點
在調試窗口中,你可以設置 JavaScript 代碼的斷點
在每個斷點上孕索,都會停止執(zhí)行 JavaScript 代碼逛艰,以便于我們檢查 JavaScript 變量的值
在檢查完畢后,可以重新執(zhí)行代碼(如播放按鈕) - debugger 關鍵字
debugger 關鍵字 與在調試工具中設置斷點的效果是一樣的
如果沒有調試可用搞旭,debugger 語句將無法工作
JavaScript變量提升
變量提升:函數(shù)聲明和變量聲明總是會被解釋器悄悄地被"提升"到方法體的最頂部JavaScript 只有聲明的變量會提升散怖,初始化的不會
var y
為變量聲明 var y=7
為變量初始化
ps: JavaScript 嚴格模式(strict mode)不允許使用未聲明的變量
JavaScript 嚴格模式(use strict)
"use strict" 的目的是指定代碼在嚴格條件下執(zhí)行
嚴格模式下你不能使用未聲明的變量
"use strict" 指令只運行出現(xiàn)在腳本或函數(shù)的開頭
嚴格模式通過在腳本或函數(shù)的頭部添加 "use strict"; 表達式來聲明
/*在函數(shù)內部聲明是局部作用域 (只在函數(shù)內使用嚴格模式)*/
x = 3.14; // 不報錯
myFunction();
function myFunction() {
"use strict";
y = 3.14; // 報錯 (y 未定義)
}
嚴格模式體現(xiàn)了Javascript更合理菇绵、更安全、更嚴謹?shù)陌l(fā)展方向镇眷,為未來新版本的Javascript做好鋪墊
具體限制
JavaScript易錯點總結
JavaScript 表單驗證
表單驗證分為JS驗證和瀏覽器自動驗證咬最。
required
屬性用于進行自動驗證,約束驗證(HTML5)欠动;
也分為服務端數(shù)據(jù)驗證和客戶端數(shù)據(jù)驗證side validation
- 驗證輸入內容是否為空
function validateForm() {
var x = document.forms["myForm"]["fname"].value;
if (x == null || x == "") {
alert("需要輸入名字永乌。");
return false;
}
}
<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
</form> - 驗證輸入的數(shù)字
- 自動驗證
<form action="demo_form.php" method="post">
<input type="text" name="fname" required>
<input type="submit" value="提交">
</form> - 必填(或必選)項目
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("姓必須填寫");
return false;
}
}
<form name="myForm" action="demo-form.php" onsubmit="return validateForm()" method="post">
姓: <input type="text" name="fname">
<input type="submit" value="提交">
</form> - E-mail 驗證
indexOf
lastIndexOf
用于表示搜索字符的位置
function validateForm(){
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
alert("不是一個有效的 e-mail 地址");
return false;
}
}
<form name="myForm" action="demo-form.php" onsubmit="return validateForm();" method="post">
Email: <input type="text" name="email">
<input type="submit" value="提交">
</form>
- JavaScript保留關鍵字
建議不要使用const
有的瀏覽器引擎支持它等價于var
JSON
JSON 是用于存儲和傳輸數(shù)據(jù)的格式。
JSON 通常用于服務端向網(wǎng)頁傳遞數(shù)據(jù) 具伍。
JSON 英文全稱 JavaScript Object Notation, 是一種輕量級的數(shù)據(jù)交換格式,是獨立的語言翅雏。
JavaScriptvoid
void 是 JavaScript 中非常重要的關鍵字,該操作符指定要計算一個表達式但是不返回值人芽。
href="#"與href="javascript:void(0)"的區(qū)別
# 包含了一個位置信息望几,默認的錨是#top 也就是網(wǎng)頁的上端。
而javascript:void(0), 僅僅表示一個死鏈接萤厅。
在頁面很長的時候會使用 # 來定位頁面的具體位置橄抹,格式為:# + id。
如果你要定義一個死鏈接請使用 javascript:void(0) 祈坠。-
語法格式
<head>
<script type="text/javascript">
或者 void(func()) javascript:void(func()) //--> </script> </head>