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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...