1. 程式人生 > >Javascript的常見數據類型以及相應操作

Javascript的常見數據類型以及相應操作

ron 部分 執行 ring 靜態 span 規則 作者 top

JavaScript概述

1 ECMAScript和JavaScript的關系

    1996年11月,JavaScript的創造者--Netscape公司,決定將JavaScript提交給國際標準化組織ECMA,希望這門語言能夠成為國際標準。次年,ECMA發布262號標準文件(ECMA-262)的第一版,規定了瀏覽器腳本語言的標準,並將這種語言稱為ECMAScript,這個版本就是1.0版。

    該標準一開始就是針對JavaScript語言制定的,但是沒有稱其為JavaScript,有兩個方面的原因。一是商標,JavaScript本身已被Netscape註冊為商標。二是想體現這門語言的制定者是ECMA,而不是Netscape,這樣有利於保證這門語言的開發性和中立性。

    因此ECMAScript和JavaScript的關系是,前者是後者的規格,後者是前者的一種實現。

盡管 ECMAScript 是一個重要的標準,但它並不是 JavaScript 唯一的部分,當然,也不是唯一被標準化的部分。實際上,一個完整的 JavaScript 實現是由以下 3 個不同部分組成的:

  • 核心(ECMAScript)
  • 文檔對象模型(DOM) Document object model (整合js,css,html)
  • 瀏覽器對象模型(BOM) Broswer object model(整合js和瀏覽器)

    簡單地說,ECMAScript 描述了JavaScript語言本身的相關內容。

    JavaScript 是腳本語言
    JavaScript 是一種輕量級的編程語言。後來出現了node.js,可以作為後端語言來開發項目,js是一個既能做前端又能做後端的語言,但是js這個作者用了10天就開發了這麽個語言,所以寫的不是很完善,這個語言有很多的槽點,後面學習起來大家就知道啦。

    JavaScript 是可插入 HTML 頁面的編程代碼。

    JavaScript 插入 HTML 頁面後,可由所有的現代瀏覽器執行。

2 JavaScript數據類型

JavaScript擁有動態類型(python也是動態的)

var x;  // 此時x是undefined  靜態語言比如c:創建變量的時候,要指定變量的類型,python3.6也出現了類型註解的新特性def func(x:int,y:int) --> int: return x + y,意思是參數是int類型,返回值也是int類型的,就是個註釋的作用
var x = 1; // 此時x是數字 var x = "Alex" // 此時x是字符串

 2.1 數值(Number)

  JavaScript不區分整型和浮點型,就只有一種數字類型。

  還有一種NaN,表示不是一個數字(Not a Number),也就是說是一個值,但不是數字。

類型轉換:

parseInt("123")  // 返回123
parseInt("ABC")  // 返回NaN,NaN屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字。
parseFloat("123.456")  // 返回123.456

2.2字符串(String)

var a = "Hello"
var b = "world;
var c = a + b; 
console.log(c);  // 得到Helloworld

常用方法(字符串):

方法                                                                         說明
.length    #不加括號的是屬性                                                  返回長度
.trim()    #得到一個新值                                                     移除空白
.trimLeft()                                                              移除左邊的空白
.trimRight()                                                             移除右邊的空白
.charAt(n)  #n類似索引,從0開始,超過最大值返回‘‘空字符串                            返回第n個字符
.concat(value, ...) #s1=‘hello‘;s.concat(‘xx‘);得到helloxx                        拼接
.indexOf(substring, start) #這個start是從索引幾開始找,沒有返回-1                     子序列位置
.substring(from, to) #不支持負數,所以一般都不用它,了解一下就行了                      根據索引獲取子序列
.slice(start, end) #var s1=‘helloworld‘;s1.slice(0,-5)看結果,就用它                    切片
.toLowerCase() #全部變小寫                                             小寫
.toUpperCase()  #全部變大寫                                             大寫
.split(delimiter, limit)#分隔,s1.splite(‘ ‘),後面還可以加參數s1.split(‘ ‘,2),返回切割後的元素個數     分割

拼接字符串一般使用“+”

    slice和substring的區別:

技術分享圖片
string.slice(start, stop)和string.substring(start, stop):

兩者的相同點:
如果start等於end,返回空字符串
如果stop參數省略,則取到字符串末
如果某個參數超過string的長度,這個參數會被替換為string的長度

substirng()的特點:
如果 start > stop ,start和stop將被交換
如果參數是負數或者不是數字,將會被0替換

silce()的特點:
如果 start > stop 不會交換兩者
如果start小於0,則切割從字符串末尾往前數的第abs(start)個的字符開始(包括該位置的字符)
如果stop小於0,則切割在從字符串末尾往前數的第abs(stop)個字符結束(不包含該位置字符)
View Code

2.3 布爾值(Boolean)

    區別於Python,true和false都是小寫。

 ""(空字符串)、0、null、undefined、NaN都是false。

  null和undefined

  • null表示值是空,一般在需要指定或清空一個變量時才會使用,如 name=null;
  • undefined表示當聲明一個變量但未初始化時,該變量的默認值是undefined。還有就是函數無明確的返回值時,返回的也是undefined。

    null表示變量的值是空,undefined則表示只聲明了變量,但還沒有賦值。

2.4 對象(Object)

    JavaScript 中的所有事物都是對象:字符串、數值、數組、函數...此外,JavaScript 允許自定義對象。

    JavaScript 提供多個內建對象,比如 String、Date、Array 等等。

    對象只是帶有屬性和方法的特殊數據類型。

    數組

      數組對象的作用是:使用單獨的變量名來存儲一系列的值。類似於Python中的列表。

var a = [123, "ABC"]; 
console.log(a[1]);  // 輸出"ABC"

 常用方法:

方法 說明
.length 數組的大小
.push(ele) 尾部追加元素
.pop() 獲取尾部的元素
.unshift(ele) 頭部插入元素
.shift() 頭部移除元素
.slice(start, end) 切片
.reverse() #在原數組上改的 反轉
.join(seq)#a1.join(‘+‘),seq是連接符 將數組元素連接成字符串
.concat(val, ...) #連個數組合並 連接數組
.sort() 排序
.forEach() #講了函數再說 將數組的每個元素傳遞給回調函數
.splice() 刪除元素,並向數組添加新元素。
.map() #講了函數再說 返回一個數組元素調用函數處理後的值的新數組

坑:

 關於sort()需要註意:

      如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字符串(如有必要),以便進行比較。

  

如果想按照其他標準進行排序,就需要提供比較函數,也就是自己提供一個函數提供排序規則,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:

      若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
      若 a 等於 b,則返回 0。
      若 a 大於 b,則返回一個大於 0 的值。

如圖所示:

技術分享圖片

關於遍歷數組中的元素,可以使用下面的方式:

var a = [10, 20, 30, 40];
for (var i=0;i<a.length;i++) {
  console.log(a[i]);
}

 splice()

    語法:

      splice(index,howmany,item1,.....,itemX)

index : 必需。規定從何處添加/刪除元素。 該參數是開始插入和(或)刪除的數組元素的下標,必須是數字。

howmany:必需。規定應該刪除多少元素。必須是數字,但可以是 "0"。如果未規定此參數,則刪除從 index 開始到原數組結尾的所有元素。

item:可選。要添加到數組的新元素

技術分享圖片

2.5 自定義對象

1.基本概念:(跟python中的字典差不多)
① 對象:對象是擁有一系列無序屬性和方法的集合。
② 鍵值對:對象中的數據是以鍵值對的方式存在。對象的每個屬性和方法,都對應值一個鍵名,以鍵取值。
③ 屬性:描述對象特征的一系列變量,稱為屬性。【對象中的變量】
④ 方法:描述對象行為的一系列函數,稱為方法。【對象中的函數】

2.對象的聲明
① 字面量聲明:var obj={
  key1:value1,
  key2:value2,
  func1:function(){}
}
>>>對象中的數據是以鍵值對形式存儲,鍵與值之間用:分隔。
  對各鍵值對之間用,分隔。
>>>對象中的鍵,可以是除了數組/對象以外的任何數據類型。但是,一般只用普通變量名作為鍵。
>>>對象中的值,可以是任何數據類型,包括數組和對象。
② 使用new關鍵字聲明:var obj=new Object();
  var.key1=value1;
  obj.func=function(){}

3.對象中屬性和方法的讀寫:

① .運算符:對象名.屬性 對象名.方法();
  對象內部:this.屬性 this.方法()
  對象外部:對象名.屬性 對象名.方法()


② 通過["key"]調用:對象名.["屬性名"] 對象名.["方法名"]();
  >>>如果鍵中包含特殊字符,只能使用第②種方式;
  >>>對象中直接寫變量名,默認為調用全局變量。如果需要調用對象自身的屬性或者方法。
    需要使用對象名.屬性,或者this.屬性。
    person.age this.age 都可以,但推薦使用this關鍵字。


③ 刪除對象的屬性和方法:delete 對象名.屬性名/方法名
  delete person.age;

示例如下:

var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);

遍歷自定義對象:
var a = {"name": "Alex", "age": 18};
for (var i in a){
  console.log(i, a[i]);
}

Javascript的常見數據類型以及相應操作