JavaScript(二)數據類型

来源:https://www.cnblogs.com/caesar-id/archive/2019/03/20/10567821.html
-Advertisement-
Play Games

數據類型:數字、Date、字元串。字元串的常用方法,Date對象的常用方法,轉義符。 ...


電腦程式的運行需要對值進行操作,在編程語言中值的類型被稱作數據類型,編程語言最基本的特性就是能夠支持多種數據類型。當程式需要將值保存起來以備將來使用時,便將其賦值給一個變數。變數是一個值的符號名稱,可以通過該名稱來獲得對值的引用。
JavaScript中除了數字、字元串、布爾值、null和undefined之外就是對象了,對象是屬性的集合,每個屬性都由“鍵:值”構成。

1、數字

和其它編程語言不同,JavaScript不區分整數值和浮點數值。JavaScript中的所有數字均用浮點數值表示。JavaScript採用IEEE754標准定義的64位浮點格式表示數字,這意味著它能表示的最大值是±1.7976931348623157x10的308次冪,最小值是±5x10的-324次冪。


整數能表示的範圍是-9007199254740992-9007199254740992(-2的53次冪到2的53次冪),包含邊界值,如果使用了超過此範圍的整數,則無法保證低位數的精度。但需要註意的是數組的索引是基於32位的整數。

當一個數字直接出現在JavaScript程式中,稱之為數字直接量,JavaScript支持多種格式的數字直接量,註意在任何數字直接量前添加符號(-)可以得到他們的負值。但負號是一元求反運算符,並不是數字直接量語法的組成部分。

1.1整形直接量
除了十進位的整形直接量,JavaScript還可以識別十六進位的值,十六進位直接量是以“0x”或“0X”為首碼,其後跟隨十六進位數串的直接量。十六進位值是0-9之間的數字和a(A)-f(F)之間的字母構成。儘管ECMAScript標準不支持八進位直接量,但JavaScript的某些實現可以允許採用八進位形式表示整數。八進位直接量以數字0開始,其後跟隨一個由0-7之間的數字組成。由於某些JavaScript的實現支持八進位直接量,而有些不支持,因此最好不要使用以0為首碼的整形直接量,畢竟我們也無法得知當前JavaScript的實現是否支持八進位的解析。在ECMAScript6的嚴格模式下,八進位直接量是明令禁止的。


1.2浮點型直接量
浮點型可以含有小數點,它們採用的是傳統的實數寫法。一個實數由整數部分,小數點和小數部分組成。
此外還可以使用科學計數法表示浮點型,即在實數後跟字母e(E)後面跟正負號,最後在加上整形的指數。語法如下:
[digits][.digits][(e|E)[(+|-)]digits]
3.14
1.234E5 表示1.234x10的5次冪
1.234E-5 表示1.234x10的-5次冪

 

1.3JavaScript中算術運算符
JavaScript程式是使用語言本身提供的算術運算符來進行數字運算的,這些運算符包括+、-、*、/、%。除了基本的運算符外,
JavaScript還支持更加複雜的算術運算符,這些複雜運算作為Math對象的屬性定義的函數和常量來實現。

方法描述
abs(x) 返回 x 的絕對值。Math.abs(-3.2)=3.2
acos(x) 返回 x 的反餘弦值。
asin(x) 返回 x 的反正弦值。
atan(x) 以介於 -PI/2 與 PI/2 弧度之間的數值來返回 x 的反正切值。
atan2(y,x) 返回從 x 軸到點 (x,y) 的角度(介於 -PI/2 與 PI/2 弧度之間)。
ceil(x) 對數進行上舍入。
cos(x) 返回數的餘弦。
exp(x) 返回 Ex 的指數。
floor(x) 對 x 進行下舍入。
log(x) 返回數的自然對數(底為e)。
max(x,y,z,...,n) 返回 x,y,z,...,n 中的最高值。
min(x,y,z,...,n) 返回 x,y,z,...,n中的最低值。
pow(x,y) 返回 x 的 y 次冪。Math.pow(2,5) =2的5次冪=32
random() 返回 0 ~ 1 之間的隨機數。
round(x) 四捨五入。Math.round(4.83)=5
sin(x) 返回數的正弦。
sqrt(x) 返回數的平方根。
tan(x) 返回角的正切。

 

JavaScript中的算術運算在溢出(overflow),下溢(underflow)或被零整除時不會報錯。當數字運算結果超過了JavaScript所能表示的數字上限(溢出),結果為一個特殊的無窮大值Infinity。同樣的當負數的值超過了JavaScript所能表示的負數範圍,結果為負無窮大-Infinity表示。無窮大值的行為特性和我們所期望的是一致的,基於它們的加減乘除結果是無窮大值。

下溢是當運算結果無限接近於0並比JavaScript能表示的最小值還小的時候發生的一種情形。這種情況下JavaScript將會返回0.當一個負數發生下溢時,JavaScript返回一個特殊的值負零,這個值(負零)幾乎和正常的零完全一樣。幾乎很少用到負零。


被零整除在JavaScript並不報錯,它只是簡單的返回無窮大或負無窮大。但有一個例外,零除以零沒有意義,這種整除運算結果也是一個非數字(not-a-number NaN)值,用NaN表示。無窮大除以無窮大,給任意負數做開方運算或者算術運算符與不是數字或無法轉換為數字的操作數一起使用時都返回NaN
非數字值NaN和任何值都不相等,包括自身。也就是說沒辦法通過a==NaN來判斷a的值是否是NaN,可以使用isNaN(變數)來判斷是否是NaN,如果結果為true表示是NaN類型。


isFinite(變數)在參數不是NaN、Infinity或-Infinity的時候返回true。
負零同樣有特殊,它和正零是相等的(即使使用JavaScript的嚴格相等測試來判斷)。這意味著兩個值幾乎一樣,除了作為除數之外:

var z = 0;

var n = -0;

z === n;   // 結果為true

a = 2 / z;  // 結果為Infinity

c = 2 / n;  //  結果為-Infinity

1.4二進位浮點數和四捨五入錯誤
實數由無數個,但JavaScript通過浮點數的形式只能表示其中有限的個數(確切的說是18437736874454810627個,本人未測試)。也就是說,當在JavaScript中使用實數的時候,常常只是真實值的一個近似表示。

JavaScript採用了IEEE-754浮點數表示法(幾乎所有現代編程語言所採用),這是一種二進位表示法,可以精確的表示分數,如1/2、1/8、1/1024。遺憾的是,我們常用的分數(特別是在金融計算方面)都是十進位分數1/10、1/100等。二進位浮點數表示法並不能精確表示類似0.1這樣簡單的數字。JavaScript具有足夠的精度,可以及其近似於0.1.但事實是,數字不能精確表述的確帶來一些問題。如下代碼:

var a = 0.3 - 0.2  // a實際等於0.09999999999999998
var b = 0.2 - 0.1  // b實際等於0.1

 由於舍入誤差,0.3和0.2之間的近似差值實際上並不等於0.2和0.1之間的近似差值。這個問題並不只在JavaScript中才會出現,在任何使用二進位浮點數的編程語言中都會有這個問題。需要理解的是上述代碼a和b的值非常的接近彼此最終的正確值,這種結果可以勝任大多數的計算任務,這個問題也只有在比較兩個值是否相等的時候才會出現。

2、Data對象

JavaScript語言核心包括Date()構造函數,用來創建表示日期和時間的對象。這些日期對象的方法為日期計算提供了簡單的API。日期對象不像數字那樣是基本數據類型。下麵是常用方法:

方法描述
getDate() 從 Date 對象返回一個月中的某一天 (1 ~ 31)。
getDay() 從 Date 對象返回一周中的某一天 (0 ~ 6)。
getFullYear() 從 Date 對象以四位數字返回年份。
getHours() 返回 Date 對象的小時 (0 ~ 23)。
getMilliseconds() 返回 Date 對象的毫秒(0 ~ 999)。
getMinutes() 返回 Date 對象的分鐘 (0 ~ 59)。
getMonth() 從 Date 對象返回月份 (0 ~ 11)。
getSeconds() 返回 Date 對象的秒數 (0 ~ 59)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒數。
getTimezoneOffset() 返回本地時間與格林威治標準時間 (GMT) 的分鐘差。
getUTCDate() 根據世界時從 Date 對象返回月中的一天 (1 ~ 31)。
getUTCDay() 根據世界時從 Date 對象返回周中的一天 (0 ~ 6)。
getUTCFullYear() 根據世界時從 Date 對象返回四位數的年份。
getUTCHours() 根據世界時返回 Date 對象的小時 (0 ~ 23)。
getUTCMilliseconds() 根據世界時返回 Date 對象的毫秒(0 ~ 999)。
getUTCMinutes() 根據世界時返回 Date 對象的分鐘 (0 ~ 59)。
getUTCMonth() 根據世界時從 Date 對象返回月份 (0 ~ 11)。
getUTCSeconds() 根據世界時返回 Date 對象的秒鐘 (0 ~ 59)。
getYear() 已廢棄。 請使用 getFullYear() 方法代替。
parse() 返回1970年1月1日午夜到指定日期(字元串)的毫秒數。
setDate() 設置 Date 對象中月的某一天 (1 ~ 31)。
setFullYear() 設置 Date 對象中的年份(四位數字)。
setHours() 設置 Date 對象中的小時 (0 ~ 23)。
setMilliseconds() 設置 Date 對象中的毫秒 (0 ~ 999)。
setMinutes() 設置 Date 對象中的分鐘 (0 ~ 59)。
setMonth() 設置 Date 對象中月份 (0 ~ 11)。
setSeconds() 設置 Date 對象中的秒鐘 (0 ~ 59)。
setTime() setTime() 方法以毫秒設置 Date 對象。
setUTCDate() 根據世界時設置 Date 對象中月份的一天 (1 ~ 31)。
setUTCFullYear() 根據世界時設置 Date 對象中的年份(四位數字)。
setUTCHours() 根據世界時設置 Date 對象中的小時 (0 ~ 23)。
setUTCMilliseconds() 根據世界時設置 Date 對象中的毫秒 (0 ~ 999)。
setUTCMinutes() 根據世界時設置 Date 對象中的分鐘 (0 ~ 59)。
setUTCMonth() 根據世界時設置 Date 對象中的月份 (0 ~ 11)。
setUTCSeconds() setUTCSeconds() 方法用於根據世界時 (UTC) 設置指定時間的秒欄位。
setYear() 已廢棄。請使用 setFullYear() 方法代替。
toDateString() 把 Date 對象的日期部分轉換為字元串。
toGMTString() 已廢棄。請使用 toUTCString() 方法代替。
toISOString() 使用 ISO 標準返回字元串的日期格式。
toJSON() 以 JSON 數據格式返回日期字元串。
toLocaleDateString() 根據本地時間格式,把 Date 對象的日期部分轉換為字元串。
toLocaleTimeString() 根據本地時間格式,把 Date 對象的時間部分轉換為字元串。
toLocaleString() 據本地時間格式,把 Date 對象轉換為字元串。
toString() 把 Date 對象轉換為字元串。
toTimeString() 把 Date 對象的時間部分轉換為字元串。
toUTCString() 根據世界時,把 Date 對象轉換為字元串。
UTC() 根據世界時返回 1970 年 1 月 1 日 到指定日期的毫秒數。
valueOf() 返回 Date 對象的原始值。

 3、字元串

字元串是一組由16位值組成的不可變的有序序列,每個字元通常來自於Unicode字元集。JavaScript通過字元串類型來表示文本。字元串的長度是其所含16位值的個數。JavaScript字元串的索引從0開始。第一個字元的位置使0,第二個位置使1,以此類推。JavaScript中的字元串由單引號或雙引號括起來。單引號定界的字元串中可以包含雙引號,由雙引號定界的字元串中也可以包含單引號。


在ECMAScript3中,字元串必須寫在一行中,而在EXMAScript5中,字元串可以拆分成數行,每行必須以反斜線(\)結束,反斜線和行結束符都不算是字元串的內容。可使用“\n”進行換行。

 var a = "Hello \
    world\
    haha"

字元串常用方法:

方法描述
charAt() 返回指定索引位置的字元
charCodeAt() 返回指定索引位置字元的 Unicode 值
concat() 連接兩個或多個字元串,返回連接後的字元串
fromCharCode() 將 Unicode 轉換為字元串
indexOf() 返回字元串中檢索指定字元第一次出現的位置
lastIndexOf() 返回字元串中檢索指定字元最後一次出現的位置
localeCompare() 用本地特定的順序來比較兩個字元串
match() 找到一個或多個正則表達式的匹配
replace() 替換與正則表達式匹配的子串
search() 檢索與正則表達式相匹配的值
slice() 提取字元串的片斷,併在新的字元串中返回被提取的部分
split() 把字元串分割為子字元串數組
substr() 從起始索引號提取字元串中指定數目的字元
substring() 提取字元串中兩個指定的索引號之間的字元
toLocaleLowerCase() 根據主機的語言環境把字元串轉換為小寫,只有幾種語言(如土耳其語)具有地方特有的大小寫映射
toLocaleUpperCase() 根據主機的語言環境把字元串轉換為大寫,只有幾種語言(如土耳其語)具有地方特有的大小寫映射
toLowerCase() 把字元串轉換為小寫
toString() 返回字元串對象值
toUpperCase() 把字元串轉換為大寫
trim() 移除字元串首尾空白
valueOf() 返回某個字元串對象的原始值

4、轉義符

反斜線(\)有著特殊的用途,反斜線後加一個字元就不再表示字元本身了,而代表其它意義。下麵是常見的轉義字元。

義字元 意義 ASCII碼值(十進位)
\a 響鈴(BEL) 007
\b 退格(BS) ,將當前位置移到前一列 008
\f 換頁(FF),將當前位置移到下頁開頭 012
\n 換行(LF) ,將當前位置移到下一行開頭 010
\r 回車(CR) ,將當前位置移到本行開頭 013
\t 水平製表(HT) (跳到下一個TAB位置) 009
\v 垂直製表(VT) 011
\\ 代表一個反斜線字元''\' 092
\' 代表一個單引號(撇號)字元 039
\" 代表一個雙引號字元 034
\? 代表一個問號 063
\0 空字元(NUL) 000
\ddd 1到3位八進位數所代表的任意字元 三位八進位
\xhh 1到2位十六進位所代表的任意字元 十六進位

學習園地:

一個整數(範圍1-100000),它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?


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

-Advertisement-
Play Games
更多相關文章
  • 文章大綱 一、 什麼是Fragment二、 Fragment生命周期三、 Fragment簡單實例四、Fragment實戰五、項目源碼下載六、參考文章 一、 什麼是Fragment Fragment是Android3.0後引入的一個新的API,他出現的初衷是為了適應大屏幕的平板電腦, 當然現在他仍然 ...
  • 此處我只是做個記錄,後邊再補充 原文地址:http://www.jufanshare.com/content/35.html 這篇文章寫的比較清楚,還附有Demo代碼。算是不錯的Android Glide詳細使用教程。 下邊是我的使用理解: ...
  • 如何打造一個安全的App?這是每一個移動開發者必須面對的問題。在移動App開發領域,開發工程師對於安全方面的考慮普遍比較欠缺,而由於iOS平臺的封閉性,遭遇到的安全問題相比於Android來說要少得多,這就導致了許多iOS開發人員對於安全性方面沒有太多的深入,但對於一個合格的軟體開發者來說,安全知識 ...
  • 一、下麵的公鑰和私鑰暫時存到文本編輯器中 公鑰: BEGIN PUBLIC KEY MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB8vXG0ImYhLHvHhpi5FS3gd2QhxSQiU6dQ04F1OHB0yRRQ3NXF5py2NNDw962i4WP1 ...
  • 每一個 HTML 文檔中,都有一個不可或缺的標簽: ,它作為一個容器,主要包含了用於描述 HTML 文檔自身信息(元數據)的標簽,這些標簽一般不會在頁面中被顯示出來,大多情況下是給瀏覽器和搜索引擎看的。 ...
  • 過濾器 vue允許自定義過濾器,我個人認為,過濾器有兩種,一種是對數據的清洗過濾,一種是對數據切換的動畫過濾 數據切換的動畫過濾 這裡還是利用前面的動態組件的例 ...
  • 今天弄一個autocomplete 向後後臺動態傳遞參數的問題 params: { "saleid": $("#divSalesman input[field='SalesmanId']").val() }, //這樣是不行的因為autocomplete() 方法不會每次都載入一遍,所以 $("#d ...
  • 一鍵獲取微信小程式源代碼 前言 最近開始學習微信小程式的開發,可是苦於(自學),很多東西看了也不太會。發現小程式的坑遠比想象的要多的多!!看到人家上線的小程式的效果,純靠推測,部分效果在絞盡腦汁後能做出大致的實現,但是有些細節,費勁全力都沒能做出來。很想一窺源碼,查看究竟,看看大廠的前端大神們是如何 ...
一周排行
    -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# ...