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

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

1.ECMAScript數值的範圍 由於記憶體的限制,在大多數瀏覽器中,ECMAScript能夠拿保存的數據的範圍是 5e-324 ~ 1.7976931348623157e+308,其中最小的數值保存在Number.MIN_VALUE中,最大的數值保存在Number.MAX_VALUE中。 如果在計 ...


1.ECMAScript數值的範圍

  由於記憶體的限制,在大多數瀏覽器中,ECMAScript能夠拿保存的數據的範圍是 5e-324 ~ 1.7976931348623157e+308,其中最小的數值保存在Number.MIN_VALUE中,最大的數值保存在Number.MAX_VALUE中。

  如果在計算的結果超出這個數值的範圍,這個數值會自動被轉換成特殊的Infinity值,具體來說,如果是負數,會被轉換成 -Infinity(負無窮),如果是正的,會被轉換成 +Infinity(正無窮)。

  需要註意的是,如果某次計算返回的是正或者負的Infinity,則該值將無法繼續參加下一次的計算,因為Infinity不是能過參與計算的數值。

  使用 isFinite()函數,可以確定一個數是否是有窮,isFinite()函數在參數位於最小和最大數值之間時會返回true。

  eg:

  var age=18;
    alert(isFinite(age));

結果:

 

 

2.NaN值:NaN即非數值(Not a Number)是一個特殊的數值,這個數值用來表示一個本來返回數值的操作數未返回數值的情況(這樣就不會拋出錯誤)

  eg:在其他編程語言中,任何數值除以0都有會導致錯誤從而停止代碼的執行。但是在ECMAScript中,任何數字除以0都會返回NaN,因此不會影響其他代碼的執行。

 

(對上文黃色部分進行說明,在高程書上是這麼寫的,但是在實際上,只有0除以0才會返回NaN值,正數除以0,返回的是Infinity,負數除以0,返回的 -Infinity)詳見以下實例:

 

var age=0;
 alert(age/0);

 

var age=18;
    alert(age/0);

 

var age=-18;
    alert(age/0);

 

  (1)NaN值的兩個特性:

  任何涉及NaN的操作都會返回NaN。

  NaN值和任何值都不相等,包括NaN本身。

  (2)isNaN()函數,該函數接收一個參數,如果該參數不是數值,它會嘗試將該值轉換為數值,而任何不能轉換為數值的值會導致這個函數返回 true。

  (3)isNaN()也適用於對象,詳見後面的章節。

 

3.數值轉換

  有三個函數可以把非數值轉換為數值:

  Number()

  parseInt()

  parseFloat()

  

  Number()可用於任何數據類型,parseInt()和parseFloat()專門用於吧字元串轉換為數值。

(1)Number()函數的具體轉換規則見高程書P30~31.

(2)由於Number()函數在轉換字元串是比較複雜而且不夠合理,因此在處理整數的時候更常用的是parseInt()函數。高程P31。

(3)在使用parseInt()函數解析八進位字面量字元串時,ECMAScript 3 和ECMAScript 5 存在不同:

  var num=parseInt(“070”);

  ECMAScript 3 認為是56(八進位),ECMAScript 5 認為是70(十進位)。因為在ECMAScript 5  Javascript引擎中,parseInt()已經有解析不具有解析八進位的能力。在ECMAScript 5 中,即使是在非嚴格模式下也是如此。

(4)可以為parseInt()函數設置第二個參數,即轉化時使用的基數(多少進位)。指定基數會影響到轉換的輸出結果:

eg:

1 var num1=parseInt("10",2);
2      var num2=parseInt("10",8);
3      var num3=parseInt("10",10);
4      var num4=parseInt("10",16);
5     alert(num1);
6     alert(num2);
7     alert(num3);
8     alert(num4);

結果圖如下:

 

註意:

  不指定基數意味著讓parseInt()決定如何解析輸入的字元串,因此為了避免錯誤的解析,我們在使用該函數時最好指定基數,多數情況下,我們要解析的都是十進位數值,因此始終將10作為第二個參數是十分有必要的。

 

(5)parseFloat()函數

  parseFloat()與paserInt()類似,也是從第一個字元(位置0)開始解析每一個字元,也是解析到字元串的尾部或是解析到遇到一個無效的浮點數字元為止。

  也就是說,字元串的第一個小數點是有效的,而第二個小數點是無效的,因此它後面的字元串將被忽略。

 

註意:

  parseFloat()只解析十進位值,它始終會忽略前導0。

  parseFloat()可以識別所有的浮點數格式。

  eg: var num=parseFloat(“3.125e7”);  //31250000

 

4.String類型

  String類型用於表示有零個或多個16位Unicode字元組成的字元序列,即字元串。可以有單引號或是雙引號表示,但是不能混合使用。

 

(1)字元字面量

  String數據類型包含一些特殊的字元字面量,叫做轉義序列。(詳見高程書P33)

(2)length屬性

  任何字元串的長度都可以通過該訪問其length屬性取得。

  eg:

  

1 var text="hello LIN!"
2     alert(text.length);

包括text中的空格符,該字元串的長度是10。

 

註意:這個屬性返回的字元數包括16位字元的數目,如果字元串包含雙位元組字元,那麼length屬性可能不會精確地返回字元串中的字元數目。

(3)字元串的特點

  ECMAScript中字元串是不可變的,字元串一旦被創建,它們的值就不會改變,要改變某個變數保存的字元串,首先要銷毀原來的字元串,然後再另一個新值的字元串填充該變數。

  eg:

  var lang=“java”;

  lang=lang+“Script”;

實現這個操作的過程是:

  首先創建一個能容納10個字元的新字元串,然後在這個字元串中填充“java”和“Script”,最後一步銷毀原來的字元串“java”和“Script”,因為這兩個字元串已經沒有用了。(這個過程在後臺發生,這也是一些舊版本的瀏覽器在拼接字元串時速度很慢的原因。)

(4)轉換為字元串

  toString()方法——返回相應值的字元串表現。

  數值,布爾值,對象和字元串值都有toString()方法。(對的,字元串也都有一個toString()方法,該方法返回字元串的一個副本。)

  一般情況下,調用toString()不用傳遞參數,但是在調用數值的toString()方法時,可以傳遞一個參數:輸出數值的基數。 

  eg:

1 var num=10;
2     alert(num.toString());
3     alert(num.toString(2));
4     alert(num.toString(8));
5     alert(num.toString(10));
6     alert(num.toString(16));

 結果圖依次如下:

  

 

  String()——該轉型函數能夠將任何類型的值轉換成字元串。String()函數遵循的規則如下:

  如果值有toString()方法,則調用該方法並返回相應的結果。

  如果值是null,這返回“null”。

  如果值是undefined,則返回“undefined”。

 

5.Object類型

  ECMAScript中的對象其實就是一組數據和功能的集合。對象可以通過執行new操作符後跟要創建的對象類型的名稱來創建。而創建Object類型的實例併為其添加屬性和(或是)方法,就可以創建自定義對象。

eg: var o=new object();

 

Object的實例具有的屬性和方法詳見高程P35。

  

 


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

-Advertisement-
Play Games
更多相關文章
  • ng-options="item.action for item in todos" ng-options表達式的基本形式, 形如 "<標簽> for <項目> in <數組> <option value="">(chosse one) </option> ng-options="item.id a ...
  • 如圖,獲取網站中問號後的參數值。 ...
  • 問題很簡單,做個上傳文件的頁面。 html頁面中簡單兩行代碼就完成基本的文件上傳頁面。如下圖。解決。 /***************************分割線********************/ 此時又來了一個新問題:如何獲取用戶上傳的這個文件的文件名、文件大小、文件類型? 效果如下圖。 ...
  • 一、負邊距與浮動佈局 1.1、負邊距 所謂的負邊距就是margin取負值的情況,如margin:-100px,margin:-100%。當一個元素與另一個元素margin取負值時將拉近距離。常見的功能如下: 1.1.1、向上移動 當多個元素同時從標準流中脫離開來時,如果前一個元素的寬度為100%寬度 ...
  • 一、標簽概述 1.HTML(英文Hyper Text Markup Language的縮寫)中文譯為“超文本標簽語言”,主要是通過HTML標簽對網頁中的文本、圖片、聲音等內容進行描述。 2.標簽分為嵌套關係與併列關係。 嵌套關係: 併列關係: 二、基本標簽 1.html標簽:作為整個html中所有標 ...
  • bootstrap框架提供了很多好用的javascript組件,可以很方便的實現常用的js效果,比如點擊彈出一個div(modal)、下拉菜單、旋轉木馬(carousel或slider),非常適合前端不專業的後端程式員使用。下麵就來看下modal和carousel如何使用。 modal即點擊彈出di ...
  • [1]原理 [2]標記清除 [3]引用計數 [4]性能問題 [5]記憶體管理 ...
  • G2 2.2.0, 『微小,但是美好的改變。』 # 一、豐富可視化交互形式 #### 選擇: [圖形的單選、多選](https://g2.alipay.com/tutorial/geom-select.html)以及[框選](https://g2.alipay.com/tutorial/ranges ...
一周排行
    -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# ...