javascript基礎集錦(一)

来源:http://www.cnblogs.com/cemaster/archive/2016/09/30/5923250.html
-Advertisement-
Play Games

本系列主要記錄javascript中,新手比較容易搞錯的地方。 (1)要特別註意相等運算符==。JavaScript在設計時,有兩種比較運算符:第一種是==比較,它會自動轉換數據類型再比較,很多時候,會得到非常詭異的結果;第二種是 比較,它不會自動轉換數據類型,如果數據類型不一致,返回false,如 ...


  本系列主要記錄javascript中,新手比較容易搞錯的地方。

  (1)要特別註意相等運算符==。JavaScript在設計時,有兩種比較運算符:第一種是==比較,它會自動轉換數據類型再比較,很多時候,會得到非常詭異的結果;第二種是===比較,它不會自動轉換數據類型,如果數據類型不一致,返回false,如果一致,再比較。由於JavaScript這個設計缺陷,不要使用==比較,始終堅持使用===比較

  (2)NaN這個特殊的Number與所有其他值都不相等,包括它自己:

        NaN === NaN; // false

       唯一能判斷NaN的方法是通過isNaN()函數

        isNaN(NaN); // true

  (3)註意浮點數的相等比較:

        1 / 3 === (1 - 2 / 3); // false
      這不是JavaScript的設計缺陷。浮點數在運算過程中會產生誤差,因為電腦無法精確表示無限迴圈小數。要比較兩個浮點數是否相等,只能計算它們之差的絕對值,看是否小於某個閾值:
        Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

  (4)null和undefined

      null表示一個“空”的值,它和0以及空字元串''不同,0是一個數值,''表示長度為0的字元串,而null表示“空”。
    在其他語言中,也有類似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,還有一個和null類似的undefined,它表示“未定義”。
    JavaScript的設計者希望用null表示一個空的值,而undefined表示值未定義。事實證明,這並沒有什麼卵用,區分兩者的意義不大。大多數情況下,我們都應該用null。undefined僅僅在

    判斷函數參數是否傳遞的情況下有用。

   (5)變數的聲明

      JavaScript在設計之初,為了方便初學者學習,並不強制要求用var申明變數。這個設計錯誤帶來了嚴重的後果:如果一個變數沒有通過var申明就被使用,那麼該變數就自動被申明

    為全局變數:

        i = 10; // i現在是全局變數
      在同一個頁面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了變數i,將造成變數i互相影響,產生難以調試的錯誤結果。
      使用var申明的變數則不是全局變數,它的範圍被限制在該變數被申明的函數體內(函數的概念將稍後講解),同名變數在不同的函數體內互不衝突。
    為了修補JavaScript這一嚴重設計缺陷,ECMA在後續規範中推出了strict模式,在strict模式下運行的JavaScript代碼,強制通過var申明變數,未使用var申明變數就使用的,將導致

    運行錯誤。

      啟用strict模式的方法是在JavaScript代碼的第一行寫上:

        'use strict';
      這是一個字元串,不支持strict模式的瀏覽器會把它當做一個字元串語句執行,支持strict模式的瀏覽器將開啟strict模式運行JavaScript。

   (6)變數的賦值

    在JavaScript中,使用等號=對變數進行賦值。可以把任意數據類型賦值給變數,同一個變數可以反覆賦值,而且可以是不同類型的變數,但是要註意只能用var申明一次,例如:
      var a = 123; // a的值是整數123
      a = 'ABC'; // a變為字元串
    這種變數本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。靜態語言在定義變數時必須指定變數類型,如果賦值的時候類型不匹配,就會報錯。例如Java是靜態語言,

    賦值語句如下:
      int a = 123; // a是整數類型變數,類型用int申明
      a = "ABC"; // 錯誤:不能把字元串賦給整型變數
    和靜態語言相比,動態語言更靈活,就是這個原因。

  (7)模板字元串   

    要把多個字元串連接起來,可以用+號連接:
      var name = '小明';
      var age = 20;
      var message = '你好, ' + name + ', 你今年' + age + '歲了!';
      alert(message);
    如果有很多變數需要連接,用+號就比較麻煩。ES6新增了一種模板字元串,表示方法和上面的多行字元串一樣,但是它會自動替換字元串中的變數
      var name = '小明';
      var age = 20;
      var message = `你好, ${name}, 你今年${age}歲了!`;
      alert(message);

  (8)字元串操作

    字元串是不可變的,如果對字元串的某個索引賦值,不會有任何錯誤,但是,也沒有任何效果:
      var s = 'Test';
      s[0] = 'X';
      alert(s); // s仍然為'Test'
    JavaScript為字元串提供了一些常用方法,註意,調用這些方法本身不會改變原有字元串的內容,而是返回一個新字元串

  (9)字元串索引計算位置

    indexOf
      indexOf()會搜索指定字元串出現的位置:
        var s = 'hello, world';
        s.indexOf('world'); // 返回7,計算這個值的時候,從1開始計算,數到該單詞第一個字元出現的位置!
        s.indexOf('World'); // 沒有找到指定的子串,返回-1
    substring
      substring()返回指定索引區間的子串:
        var s = 'hello,world'
        s.substring(0, 5); // 從索引0開始到5(不包括5),返回'hello'
        s.substring(6); // 從索引6開始到結束(包括6),返回'world'

      計算這個索引的時候,記著substring的左數值要包括,右數值不包括。

  (10)數組   

    JavaScript的Array可以包含任意數據類型,並通過索引來訪問每個元素。
    要取得Array的長度,直接訪問length屬性:
      var arr = [1, 2, 3.14, 'Hello', null, true];
      arr.length; // 6
    請註意,直接給Array的length賦一個新的值會導致Array大小的變化:

      var arr = [1, 2, 3];
      arr.length; // 3
      arr.length = 6;
      arr; // arr變為[1, 2, 3, undefined, undefined, undefined]
      arr.length = 2;
      arr; // arr變為[1, 2]
  Array可以通過索引把對應的元素修改為新的值,因此,對Array的索引進行賦值會直接修改這個Array:

    var arr = ['A', 'B', 'C'];
    arr[1] = 99;
    arr; // arr現在變為['A', 99, 'C']
  請註意,如果通過索引賦值時,索引超過了範圍,同樣會引起Array大小的變化:

    var arr = [1, 2, 3];
    arr[5] = 'x';
    arr; // arr變為[1, 2, 3, undefined, undefined, 'x']
    大多數其他編程語言不允許直接改變數組的大小,越界訪問索引會報錯。然而,JavaScript的Array卻不會有任何錯誤。在編寫代碼時,不建議直接修改Array的大小,

  訪問索引時要確保索引不會越界。

 

  註:本文素材皆來自廖大神的個人網站,我只是做一個簡要的總結。在此對他表示感謝,給大家提供這樣的一個平臺。出處:http://www.liaoxuefeng.com/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.常用的JavaScript庫對比 Prototype、Dojo、YUI、Mootools jQuery是一個輕量級的JavaScript庫,大型開發必備——由John Resig於2006年創建。 jQuery的理念是:寫得少做得多。 優勢:簡化了Js的複雜操作,不再關心相容性,大量的實用方法。 ...
  • 前言 和其他編程語言一樣,Javascript同樣擁有著很多種設計模式,比如單例模式、代理模式、觀察者模式等,熟練運用Javascript的設計模式可以使我們的代碼邏輯更加清晰,並且更加易於維護和重構。 本文將介紹Javascript模式中較為常見和實用的模式——單例模式,主要分為概念和實例部分。在 ...
  • 開發中會經常涉及到文件上傳的需求,根據業務不同的需求,有不同的文件上傳情況。 有簡單的單文件上傳,有多文件上傳,因瀏覽器原生的文件上傳樣式及功能的支持度不算太高,很多時候我們會對樣式進行美化,對功能進行完善。 本文根據一個例子,對多文件的上傳樣式做了一些簡單的美化(其實也沒怎麼美化。。),同時支持選 ...
  • 總喜歡整理一些小的demo,整合成插件,以後就方便用啦! 按鈕的倒計時插件,參數直接給到秒數就好! ...
  • 今天再次遇到了offset***、client***、scroll***的這三類屬性的問題,總是混淆,現歸納總結如下: 大體上來說可以這樣理解: client***屬性(clientWidth、clientHeight): 表示元素可以看到內容的可見區域部分,一般是最後一個對象條以下到狀況欄以上的這 ...
  • × 目錄 [1]尺寸設置 [2]位置設置 前面的話 對於javascript來說,元素尺寸有scroll、offset、client三大屬性,以及一個強大的getBoundingClientRect()方法。而jQuery有著對應的更為簡便的方法。本文將詳細介紹jQuery中的元素尺寸和位置操作 尺 ...
  • 對項目的說明: 前一段時間移動端網站中要求實現一個“內容觸摸滑動”的功能,需求如下: 1. 通過點擊小圖顯示大圖; 2. 再次點擊大圖回到原來的小圖; 3. 圖片能夠滑動切換; 4. 顯示當前圖片的索引(目前我正在瀏覽哪一張圖片)。 自己寫了一些功能,完成了第 1、2 的需求,但是由於 js 基礎較 ...
  • 上圖: 聲明 字元串連接 截取字元串 轉換大小寫 字元串比較 檢索字元串 查找替換字元串 特殊字元 \b : 後退符 \t : 水平製表符 \n : 換行符 \v : 垂直製表符 \f : 分頁符 \r : 回車符 \” : 雙引號 \’ : 單引號 \ 反斜桿 特殊字元 \b : 後退符 \t : ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...