JS高程3.基本概念(2)

来源:http://www.cnblogs.com/LinSL/archive/2016/12/07/6134892.html
-Advertisement-
Play Games

1.ECMAScript數據類型 5種簡單數據類型,分別是: Undefined Null Boolean Number String 1種複雜數據類型: Object (1)typeof操作符——檢測給定變數的數據類型 “undefined”——未定義 “booleam”——布爾值 “string ...


1.ECMAScript數據類型

  5種簡單數據類型,分別是:

    Undefined

    Null

    Boolean

    Number

    String

  1種複雜數據類型:

    Object

(1)typeof操作符——檢測給定變數的數據類型

  “undefined”——未定義

  “booleam”——布爾值

  “string”——字元串

  “number”——數值

  “object”——對象或是null

  “function”——函數

eg:

1  <script type="text/javascript">
2     var m="hello!"
3     alert(typeof(m));
4     alert(typeof m);
5     alert(typeof 93);
6     </script>

出現3個提示框,分別是:

註意:(1)以上例子說明,typeof操作符的操作數可以是變數,也可以是數值字面量。

   typeof是一個操作符,而不是一個函數,所以例子中的圓括弧可以使用,但不是必需的。

     (2)調用 typeof null返回的是 “Object” ,因為特殊值null被認為是空的對象引用。

 

2.Undefined類型

  undefined類型只有一個值,即特殊的undefined。使用var聲明變數但沒有進行初始化賦值時,這個變數的值就是undefined。

  eg:

  

1 var message;
2 alert(message);

 

 

 

  結果圖:

  上面的例子只是聲明瞭變數message,但沒有對其進行初始化。

 

註意:

  (1)未經初始化的變數,其預設值為undefined,與沒有進行定義的變數是不一樣的。

eg:

1 var message;
2     alert(message);
3     alert(age);

第三行會出現錯誤:

 

  

   運行以上代碼,第一個警告框會顯示變數message的值,即undefined。第二個警告框由於傳遞給alert()函數的是沒有聲明的變數age,則會導致一個錯誤。

  對沒有聲明的變數,只能執行一項操作,即使用typeof操作符檢測其數據類型(對沒有聲明的變數調用delete不會導致錯誤,但是這樣做沒有實際意義,而且在嚴格模式下會導致錯誤。)

  (2)使用alert()函數,輸出的變數的值,已經定義聲明,但是沒有進行初始化的變數的值為“undefined”,使用typeof操作符輸出的變數的數據類型,已經定義聲明,但是沒有進行初始化的變數的數據類型也是“undefined”。

  (3)對沒有定義的變數使用typeof操作符同樣也是返回undefined。

  eg:

1 var message;
2     alert(typeof message);
3     alert(typeof age);

 

上面的代碼會出現兩個警告框,都是顯示“undefined”。

 

3.Null類型

  null類型的數據只有一個值,就是null,null值表示一個空對象的指針,當用typeof操作符檢測null時,會返回“object”。

eg:

1 var car=null;
2     alert(typeof(car));

 

 

  如果定義的變數是準備來保存對象的,最好將該變數初始化為null而是不其他的值。實際上undefined值是派生自null值的,因此ECMA-262規定它們的相等性測試要返回true。

alert(null==undefined);

 

    

註意:

  儘管null和undefined有這樣的關係,但是它們的用途是完全不同的。我們知道,在一般情況下,都沒有必要把一個變數的值顯式地設置為undefined,但是null卻不同,只要意在保存對象的變數還有真正保存對象,就應該明確地讓該變數保存為null值。

  這樣做不僅可以體現null作為空對象指針的慣例,也有助於進一步區分null和undefined。

 

4.Boolean類型

  (1)該類型的值:true和false。(這兩個值和數字值不是一回事,因此true不一定等於1,false不一定等於0。)

  註意:Boolean類型的字面值是區分大小寫的。

  (2)ECMAScript中所有類型的值都有與Boolean值等價的值。要將一個值轉化為其對應的Boolean值,可以轉換函數Boolean(),至於放回的值是true還是false,取決於要轉換至的數據類型及其實際值。

註:各種數據類型及其對應的轉換規則,詳見高程P26.

 

5.Number類型

  (1)八進位字面值的第一位必須是0,當數字序列超過0~7時,前導0會被忽略,後面的數字將當做十進位數值解析。

    八進位子在嚴格模式下無效的,會導致Javascript引擎拋出錯誤。

  (2)在進行算術運算時,八進位和十六進位都會被轉換成十進位數值。

  (3)浮點數:該數值中必須包含一個小數點,並且小數點後面必須至少有一位數字。

    註意:由於保存浮點數值需要的記憶體空間是保存整數的兩倍,因此ECMAScript會不失時機地將浮點數轉換為整數來保存。顯然,如果小數點後沒有任何數字,這個數值可以作為整數來保存,如果浮點數值本身就是一個整數(eg:1.0),那麼該值也會被轉換為整數。

  (4)預設情況下,ECMAScript會將小數點後面帶有6個零以上的浮點數值轉換為以e表示法表示的數值。

  (5)浮點數的最高精度為17位小數,但是在進行計算時其精度遠不如整數。

    eg:0.1+0.2的結果不是等於0.3,而是等於0.30000000000000004.

用代碼測試情況如下:

 var a=0.1,b=0.2;
    if(a+b==0.30000000000000004){
        alert("You got 0.3");
    }

結果:

 

當代碼為:

 var a=0.1,b=0.2;
    if(a+b==0.3){
        alert("You got 0.3");
    }

時,測試無法通過

因此,一般不要測試某個特定的浮點數值。

 

  

  

 


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

-Advertisement-
Play Games
更多相關文章
  • 摘要: 介紹各平臺下的圖形化界面git客戶端(本人並沒有全部使用過),歡迎大家補充新的軟體或者使用感受~ 一、TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的 Git 版本,T ...
  • 1、nginx相對於apache的優點: 輕量級,同樣起web 服務,比apache 占用更少的記憶體及資源 抗併發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能 高度模塊化的設計,編寫模塊相對簡單 社區活躍,各種高性能模塊出品迅速啊 ...
  • 最近因公司項目原因,去了趟昆明出差,其中第一次接觸安裝redis,配置sentinel,學習到不少,但也都是皮毛而已,本隨筆記下所學知識。 1、首先介紹下redis,來源自百度百科 redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括stri ...
  • 剛學了js的一些函數,所以做了一個太極的旋轉。做完之後是上面這個樣子的,是可以旋轉的。 思路: 1.先做一個基準轉盤,之後將元素都放在轉盤上,跟隨轉盤動。 2.畫兩個半圓,主要屬性是border-top-right-radius: 250px; 像素值為長邊的一半。 3.然後畫4個圓,以基準轉盤為父 ...
  • JavaScript組成: ECMAscript 瀏覽器對象模型 BOM 文檔對象模型 DOM // ecmascript bom dom dom (文檔對象模型) 用來訪問和操縱html文檔 bom (瀏覽器對象模型) js 是瀏覽器語言 JavaScript引入: 1 <script src=“ ...
  • 背景(background)是css中很重要的一部分,也是css的基礎知道之一,現在來回顧css2中5個屬性與css3中新增的3個屬性和2個功能。 CSS2_背景(background)前傳 家族成員 背景(background)家族在css2中由5個主要的背景屬性組成,分別是: 想知道家族五大成員 ...
  • 背景: 自從今年下半年接觸一個基於ReactJS 的手機APP項目。開始瞭解到了Corodva這個神奇的東西。後續自己也自作了一些小的APP放到了應用寶上。8月份開始想做一個博客園APP。於是就私聊博客園團隊申請了博客園API訪問許可權(當然其實應用寶裡面也有博客園APP了。而且用fiddler抓取了 ...
  • 類定義 ES6完整學習阮老師的ECMAScript6入門。 技術一般水平有限,有什麼錯的地方,望大家指正。 以前我們使用ES5標准定義一個構造函數的過程如下: 通常首字母大寫的函數我們稱為構造函數(並不是一種語法約束,只是一種約定俗成的規律),屬性寫在方法裡面,函數寫在原型上面,這樣實例化(new操 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...