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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...