JavaScript學習筆記(二)

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 自身自動轉換

  • 轉化為字符串:
  1. String(x)外盯,適用于任何類型的數(shù)字,字母翼雀,變量饱苟,表達式
  2. 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>
    

JavaScript 代碼規(guī)范

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末害碾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赦拘,更是在濱河造成了極大的恐慌慌随,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躺同,死亡現(xiàn)場離奇詭異阁猜,居然都是意外死亡,警方通過查閱死者的電腦和手機蹋艺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門剃袍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捎谨,你說我怎么就攤上這事民效。” “怎么了涛救?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵畏邢,是天一觀的道長。 經(jīng)常有香客問我检吆,道長舒萎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任蹭沛,我火速辦了婚禮臂寝,結果婚禮上章鲤,老公的妹妹穿的比我還像新娘。我一直安慰自己咆贬,他們只是感情好败徊,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著素征,像睡著了一般集嵌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上御毅,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天根欧,我揣著相機與錄音,去河邊找鬼端蛆。 笑死凤粗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的今豆。 我是一名探鬼主播嫌拣,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起汉嗽,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灰瞻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辅甥,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡酝润,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了璃弄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片要销。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖夏块,靈堂內的尸體忽然破棺而出疏咐,到底是詐尸還是另有隱情,我是刑警寧澤脐供,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布凳鬓,位于F島的核電站,受9級特大地震影響患民,放射性物質發(fā)生泄漏。R本人自食惡果不足惜垦梆,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一匹颤、第九天 我趴在偏房一處隱蔽的房頂上張望仅孩。 院中可真熱鬧,春花似錦印蓖、人聲如沸辽慕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溅蛉。三九已至,卻和暖如春他宛,著一層夾襖步出監(jiān)牢的瞬間船侧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工厅各, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镜撩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓队塘,卻偏偏與公主長得像袁梗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子憔古,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容