JS的基本概念和數據類型

来源:https://www.cnblogs.com/hjy-21/archive/2020/02/13/12301952.html
-Advertisement-
Play Games

什麼是 JavaScript 語言 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE JavaScript 是一種輕量級的腳本語言。所謂“腳本語言”,指的是它不具備開發操作系統的能力,而是只用來編寫控制其他大型應用程式(比如瀏覽器)的“腳 ...


什麼是 JavaScript 語言

JavaScript 是一種輕量級的腳本語言。所謂腳本語言,指的是它不具備開發操作系統的能力,而是只用來編寫控制其他大型應用程式(比如瀏覽器)的腳本本身不提供任何的 API,都要靠宿主環境(host)提供,所以 JavaScript 只合適嵌入更大型的應用程式環境,去調用宿主環境提供的底層 API

JavaScript 的核心語法部分相當精簡,只包括兩個部分:基本的語法構造(比如操作符、控制結構、語句)和標準庫(就是一系列具有各種功能的對象比如ArrayDateMath等)。除此之外,各種宿主環境提供額外的 API(即只能在該環境使用的介面),以便 JavaScript 調用。以瀏覽器為例,它提供的額外 API 可以分成三大類。

  • 瀏覽器控制類:操作瀏覽器
  • DOM 類:操作網頁的各種元素
  • Web 類:實現互聯網的各種功能

JavaScript 與 Java 的關係

JavaScript 和 Java 的關係。它們是兩種不一樣的語言,但是彼此存在聯繫。JavaScript 的基本語法和對象體系,是模仿 Java 而設計的。但是,JavaScript 沒有採用 Java 的靜態類型。”。JavaScript 語言的函數是一種獨立的數據類型,以及採用基於原型對象(prototype)的繼承鏈。這是它與 Java 語法最大的兩點區別。另外,Java 語言需要編譯,而 JavaScript 語言則是運行時由解釋器直接執行。

 

基本概念

語句

javascript以行為單位執行

語句是為了完成某種任務而進行的操作,如
var a = 1 + 3;

表達式

 6+ 3就叫做表達式

語句與表達式的區別

前者主要為了進行某種操作,一般不需要返回值

後者是為了得到返回值,一定會返回一個值

變數

變數是對值的引用,使用變數等同於引用一個值
var a = 1
實際步驟是
var a;
a= 1;

變數提升

由於js引擎的工作方式,先解析代碼獲取所有被聲明的變數,然後再一行一行的執行,這樣就造成了,所有變數的聲明語句,都會被提升到代碼的頭部,這就是變數提升

標識符

變數名就是最常見的標識符,規則如:

第一個字元,可以是任意Unicode字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_)。

第二個字元及後面的字元,除了Unicode字母、美元符號和下劃線,還可以用數字0-9。

註意點

  • JavaScript 的變數名區分大小寫,A和a是兩個不同的變數。
  • 變數的聲明和賦值,是分開的兩個步驟, 如果只是聲明變數而沒有賦值,則該變數的值是undefined。undefined是一個特殊的值,表示“無定義”。
  • 可以在同一條var命令中聲明多個變數
  • JavaScript 是一種動態類型語言,也就是說,變數的類型沒有限制,變數可以隨時更改類型
  • 單行註釋 //,多行 /* */ 之間
  • 三元運算符? :,可以用於邏輯判斷。(條件) ? 表達式1 : 表達式2上面代碼中,如果“條件”為true,則返回“表達式1”的值,否則返回“表達式2”的值。

數據類型

概述

  JavaScript 語言的每一個值,都屬於某一種數據類型,共有六種.

  • 數值(number):整數和小數(比如1和3.14)
  • 字元串(string):字元組成的文本(比如"Hello World")
  • 布爾值(boolean):true(真)和false(假)兩個特定值
  • undefined:表示“未定義”或不存在,即由於目前沒有定義,所以此處暫時沒有任何值
  • null:表示無值,即此處的值就是“無”的狀態。
  • 對象(object):各種值組成的集合

  其中數值,字元串,布爾值成為原始類型的值,undefined和null一般被視為特殊值,對象則為合成類型的值,往往由多個原始類型的值合成

 

typeof運算符

JavaScript有三種方法,可以確定一個值到底是什麼類型。

  • typeof運算符
  • instanceof運算符
  • Object.prototype.toString方法

typeof運算符可以返回一個值的數據類型,可能有以下結果:

(1)原始類型

數值、字元串、布爾值分別返回number、string、boolean。

(2)函數

函數返回function,雖然函數屬於對象,但是typeof內部是將函數是返回function

(3)undefined

undefined返回undefined

(4)其他返回object

數組的類型也是object,這表示在JavaScript內部,數組本質上只是一種特殊的對象。
可以用instanceof運算符進行區分

 

一些特殊數值

NAN

 1)含義

NaN是 JavaScript 的特殊值,表示“非數字”(Not a Number),主要出現在將字元串解析成數字出錯的場合。

5 - 'x' // NaN

上面代碼運行時,會自動將字元串x轉為數值,但是由於x不是數值,所以最後得到結果為NaN,表示它是“非數字”(NaN)。

另外,一些數學函數的運算結果會出現NaN。

Math.acos(2) // NaN

Math.log(-1) // NaN

Math.sqrt(-1) // NaN

0除以0也會得到NaN。

0 / 0 // NaN

需要註意的是,NaN不是獨立的數據類型,而是一個特殊數值,它的數據類型依然屬於Number,使用typeof運算符可以看得很清楚。

typeof NaN // 'number'

(2)運算規則

NaN不等於任何值,包括它本身。

NaN === NaN // false

數組的indexOf方法內部使用的是嚴格相等運算符,所以該方法對NaN不成立。

[NaN].indexOf(NaN) // -1

NaN在布爾運算時被當作false。

Boolean(NaN) // false

NaN與任何數(包括它自己)的運算,得到的都是NaN。

Infinity

(1)含義

Infinity表示“無窮”,用來表示兩種場景。一種是一個正的數值太大,或一個負的數值太小,無法表示;另一種是非0數值除以0,得到Infinity。

第一個場景是一個表達式的計算結果太大,超出了能夠表示的範圍,因此返回Infinity。第二個場景是0除以0會得到NaN,而非0數值除以0,會返回Infinity。

Infinity有正負之分,Infinity表示正的無窮,-Infinity表示負的無窮。

非零正數除以-0,會得到-Infinity,負數除以-0,會得到Infinity。

由於數值正向溢出(overflow)、負向溢出(underflow)和被0除,JavaScript 都不報錯,所以單純的數學運算幾乎沒有可能拋出錯誤。

Infinity大於一切數值(除了NaN),-Infinity小於一切數值(除了NaN)。

Infinity與NaN進行比較,總是返回false。

(2)運算規則

Infinity的四則運算,符合無窮的數學計算規則。

0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity。

Infinity加上或乘以Infinity,返回的還是Infinity。

Infinity減去或除以Infinity,得到NaN。

Infinity與null計算時,null會轉成0,等同於與0的計算。

Infinity與undefined計算,返回的都是NaN。

 

布爾值

布爾值:true/false

下列運算符會返回布爾值:

  • 二元邏輯運算符: &&(and), ||(or)
  • 前置邏輯運算符: !(not)
  • 相等運算符: ===, !==, !=
  • 比較運算符: > ,>= ,< ,<=

下麵這些值如果轉化為布爾值則為false,其他都為true

  • undefined
  • null
  • 0
  • NaN
  • '' ''/' ' (空字元串)

空數組( [] )和空對象( {} )轉化為布爾值為true

 

 數據類型轉換

 轉為字元串:使用 .toString或者String。

1、 .toString()方法:註意,不可以轉null和underfined

    //轉為字元串-->toString方法

    var bool=true;

    console.log(bool.toString());

    //註意,toString不能轉null和underfined.

2、String()方法:都能轉

console.log(String(null));

3、隱式轉換:num  +  "",當 + 兩邊一個操作符是字元串類型,一個操作符是其它類型的時候,會先把其它類型轉換成字元串再進行字元串拼接,返回字元串

    var a=true;

    var str= a+"";

    console.log('str');

轉為數值類型

1、Number():Number()可以把任意值轉換成數值,如果要轉換的字元串中有一個不是數值的字元,返回NaN

console.log(Number(true));

2、parseInt():

    var a="12.3px";

    console.log(parseInt(a);

    //結果:12.3.  如果第一個字元是數字會解析知道遇到非數字結束.

    var a="abc2.3";

    console.log(parseInt(a);

    ////結果:返回NaN,如果第一個字元不是數字或者符號就返回NaN.

3、parseFloat():   parseFloat()把字元串轉換成浮點數,parseFloat()和parseInt非常相似,不同之處在與parseFloat會解析第一個. 遇到第二個.或者非數字結束如果解析的內容里只有整數,解析成整數。

4、隱式轉換:

    var str="123";

    var num=str-0;

    console.log(num);

    //結果為數值型;

轉換為Boolean():0  ''(空字元串) null undefined NaN 會轉換成false  其它都會轉換成true

1、Boolean():

console.log(Boolean(2));

2、一些環境中

   var message;

    if(message){};

3、隱式轉換:!!

    var str="123";

    var bool=!!str;

    console.log(str);