1. 程式人生 > >JS資料型別之基本資料型別

JS資料型別之基本資料型別

一、資料型別簡介:

1.JavaScript(以下簡稱js)的資料型別分為兩種:原始型別(即基本資料型別)和物件型別(即引用資料型別);

2.js常用的基本資料型別包括undefined、null、number、boolean、string;

3.js的引用資料型別也就是物件型別Object,比如:Object、array、function、data等;

二、基本資料型別特點:

1.基本資料型別是按值訪問的,就是說我們可以操作儲存在變數中的實際的值;

2.基本資料型別的值是不可變的,任何方法都無法改變一個基本資料型別的值,比如一個字串:

  let name = 'zhangsan'
  name.substr()
  console.log(name) // 輸出:zhangsan
  let age = 'firstblood'
  age.toUpperCase()
  console.log(age) // 輸出:firstblood

通過上面的例子,我們可以發現原來定義的變數name的值始終沒有發生改變,而呼叫substr()和toUpperCase()方法後返回的是一個新的字串,跟原來定義的變數name並沒有什麼關係。

再看下面的程式碼:

  let name = 'zhangsan'
  name = 'lisi'
  console.log(name) // 輸出:lisi

上面的例子看來name的值好像“改變了”,這裡的基礎資料型別是string,也就是“zhagnsan”,這裡的“zhangsan”是不可以改變的,name只是指向“zhagnsan”的一個指標,指標的指向不可以改變,所以下面的name = 'lisi',將name指向了“lisi”,這裡的“lisi”也是不可以改變的。也就是說這裡的改變只是“指標指向的改變”。

3.基本資料型別不可以新增屬性和方法:

  let user = 'zhangsan'
  user.age = 18
  user.method = function () {
    console.log('12345')
  }
  console.log(user.age) // 輸出:undefined
  console.log(user.method) // 輸出:undefined

上面的程式碼可以看出,基本資料型別是不能新增屬性和方法的,再次說明基本資料型別是不可變的。

4.基本資料型別的賦值是簡單的賦值(如果從一個變數向另一個變數賦值基本型別的值,會在變數物件上建立一個新值,然後把該值賦值到位新變數分配的位置上):

  let a = 18
  let b = a
  a++
  console.log(a) // 輸出:19
  console.log(b) // 輸出:18

上面的程式碼,a中儲存的值是18,當使用a的值來初始化b時,b中也儲存了值18,但是b中的18和a中的18完全是獨立的,b中的值只是a中值的一個副本,所以這兩個變數可以參與任何操作而不會相互影響。

5.基本資料型別的比較是值的比較:

  var a = '{}'
  var b = '{}'
  console.log(a === b) // 輸出:true

6.基本型別的值在記憶體中佔據固定大小的空間,被儲存在棧記憶體中。(從一個變數向另一個變數複製基本型別的值,會建立這個值的一個副本);

假如有以下幾個基本型別的變數:

  let name = 'zhangsan'
  let age = 18
  let weight = '60kg'

他的儲存結構如下圖(棧區包括了變數的識別符號和變數的值):


三、基本資料型別詳解:

1.number型別

①number型別包含整數和浮點數(浮點數數值必須包含一個小數點,且小數點後至少有一位數字)。

浮點數會自動轉換為整數,如下:

  let num = 1.00
  console.log(num) // 輸出:1,自動轉換為了整數

②浮點數的最高精度是17位,看下面的例子:

  let a = 0.1
  let b = 0.2
  console.log(a + b) // 輸出:0.30000000000000004

上面的例子,結果竟然不是0.3,至於其他變成語言,也會遇到這種情況(關於浮點數計算會產生誤差問題,其他有些變成語言也會出現類似情況。)

③NaN:非數字型別,特點:涉及到任何關於NaN的操作,都會返回NaN,而且NaN不等於自身。如下:

  let name = 'lisi'
  console.log(name / 10) // 輸出:NaN
  console.log(NaN === NaN) // 輸出:false

④isNaN()函式用於判斷是否是一個非數字型別,如果傳入的引數是一個非數字型別,那麼返回true,否則返回false;

⑤isNaN()函式傳入一個引數,函式會先將引數轉換為數值,如果引數型別為物件型別,會先呼叫物件的valueOf()方法,再確定該方法返回的值是否可以轉換為數值型別,如果不能,再呼叫物件的toString()方法,再確定返回值;

⑦數值轉化:

Number(),轉型函式,可以用於任何資料型別

parseInt(),將值轉換為整型,用的較多

parseFloat(),將值轉換為浮點型

2.string型別

①字串型別中的單雙引號作用一樣;

②字串有length屬性,可以取得字串的長度:

  let str = 'Hello world'
  console.log(str.length) // 輸出:11
③字串的值是不可變的,要改變一個字串的值,首先要銷燬原來的字串,再用另一個包含新值得字串區填充該字串;

④字串轉換:

String(),轉型函式,適用於任何資料型別(null,undefined轉換後為null和undefined)

toString()方法可以把一個邏輯值轉換為字串,並返回結果(null、undefined沒有toString()方法)

  let ab = 'zhangsan'
  let bc = null
  let cd = undefined
  console.log(ab.toString())  // 輸出:zhangsan
  // console.log(bc.toString())  // error 報錯
  // console.log(cd.toString())  // error 報錯
  console.log(String(ab))  // 輸出:zhangsan
  console.log(String(bc))  // 輸出:null
  console.log(String(cd))  // 輸出:undefined

3.boolean型別

①這個型別只有兩個值,true和false;

②Boolean(),轉型函式,將某個值轉換為Boolean型別

4.null型別

①null型別被看做空物件指標,只有一個值,即null值,所以在用typeof操作符去檢測null型別的值得時候,結果是object型別;

②如果你定義了一個變數,但是想在以後把這個物件當做一個物件來使用,最好將該物件初始化為null值

5.undefined型別

①只有一個值,即undefined,如果聲明瞭一個變數,但是未給變數初始化值,那麼這個變數的值就是undefined:

  let name = 'zhangsan'
  let age
  console.log(name) // 輸出:zhangsan
  console.log(age) // undefined,因為聲明瞭age,但是沒有給初始化值

②呼叫函式時,應該提供的引數沒有提供,該引數等於undefined;

③物件沒有賦值的屬性,該屬性的值為undefined;

④函式沒有返回值,預設返回undefined。

參考文章:

相關推薦

JS資料型別基本資料型別

一、資料型別簡介:1.JavaScript(以下簡稱js)的資料型別分為兩種:原始型別(即基本資料型別)和物件型別(即引用資料型別);2.js常用的基本資料型別包括undefined、null、number、boolean、string;3.js的引用資料型別也就是物件型別O

js基本資料型別型別轉換

基本型別資料型別轉換: 將其他資料樂行轉換為Number ,String ,Boolean型別。    1  .轉換為 Number型別      1)  轉換方式:+    Number

Python學習路——Python基礎基本資料型別(列表、元組和字典)

基本資料型別 數字 字串 列表 list 元組 tuple 字典 dict 布林值 bool 列表和元組 列表:有序,元素可以被修改元組: 書寫格式:元組的一級元素不可被修改,不能被增加或者刪除,一般寫元租的時候,推薦在最後加入',' 索引:v =

Python學習路——Python基礎基本資料型別

基本資料型別 數字 字串 列表 list 元祖 tuple 字典 dict 布林值 bool ×××的魔法 數字 將字串轉換為數字:int a = "123" print(type(a),a) b = int(a) print(type(b),b) n

Java基礎基本資料型別到底是幾種?

如果連基本資料型別都不知道,恐怕是還沒入門。當然,有些人不去記,肯定不知道。就知道常用的有 int。其他,沒了。 此文只是說明 基本資料型別有幾種?具體 區別 另行檢視其它文章。 基本資料型別到底有幾種? 7種? 在我的腦海中,好多人還以為常用的基本型別有7種,當

java基礎----基本資料型別和引用資料型別的引數傳遞過程(一)

值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際引數的值。 引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引

TypeScript基本資料型別

前言 最近專案很急,所以沒有什麼時間回答關於Xamarin.Android方面的問題,也有一段時間沒有更新。主要是手頭很缺人,如果有誰有興趣加入我們的話,可以私聊我,這樣我就能繼續造福社群了,同時還有很多的好的庫我也可以開源(相容MvvmCross)。下面就我學習TypeScript。 工具 大家可

Java——基本資料型別與byte陣列相互轉化

我們直接上程式碼 package cn.com.eteamsun.utils; import java.nio.charset.Charset; /** * Java基本資料型別和byte陣列相互轉化 * @author liuyazhuang * */ p

Java基本資料型別(8種還是9種)-yellowcong

今天看了一下部落格,發現有人說資料型別有9中, 一下子重新整理了我的世界觀,說好的8中基本資料型別,哪來的9種啊,後來發現 void 這孫子也是基本型別(PS:8種還是9種,都說法不一),《Think in Java》這本書上說是9 種,但是人家JAVA的

java基本資料型別所佔的位元組數

byte 1位元組 short 2位元組 char 2位元組(C語言中是1位元組)可以儲存一個漢字 int 4位元組 long 8位元組

Python語法 基本資料型別

資料型別 整數 int = 20 print int 效果如下: 浮點型 float = 6.6 print float 效果如下: 字串 字串可以用單引號,雙引號,以及三引號括起來形成字串,單引號與雙引號括起來的用

java基礎語法基本資料型別轉換

隱式轉化 數值型別在記憶體中直接儲存其本身的值,對於不同的數值型別,記憶體中會分配相應的大小去儲存。隱式轉換也叫作自動型別轉換, 由系統自動完成.從儲存範圍小的型別到儲存範圍大的型別.byte ,short,char,->int->long->float->double,

Python語法 基本資料型別

資料型別 整數 int = 20 print int 效果如下: 浮點型 float = 6.6 print float 效果如下: 字串 字串可以用單引號,雙引號,以及三引號括起來形成字串,單引號與雙引號括起來的用法完全相同,三引號字串,表示多

Python學習基本資料型別 bool值,邏輯運算子

Truth Value TestingAny object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations b

Java基礎基本資料型別、封裝型別

基本資料型別有4類8種: byte、short、int、long、float、double、boolean、char (在棧中可以直接分配記憶體的資料是基本資料型別)(除此之外都是引用資料型別:資料的

1 Java學習 基本資料型別

*   資料型別              位元組數             最大值                                          最小值                                     預設值*   byte                    

C++基本資料型別轉換和轉換函式

基本資料型別轉換 C++語言中型別轉換有兩種:隱式轉換和強制轉換。在型別轉換的過程中還有保值轉換和非保值轉換之分。保值轉換是安全的,資料精度不會受到損失,如資料型別有低向高轉換;非保值轉換是不安全的,

C語言基礎基本資料型別

char 字元型別 1位元組  輸出符為%c int  整型  4位元組  輸出符為%d short  短整型  2位元組  輸出符為%hd float 單精度浮點型  4位元組  輸出符為%f l

Go語言基本資料型別以及一些規範

go基本資料型別 1.bool,一個位元組,值是true或者false,不可以用0或者1表示(java中boolean佔用4個位元組,而boolean作為陣列出現時,每個boolean佔用1個位元組)

javascript的資料型別基本型別和引用型別

不知道在初學js的同學對下面的程式碼有沒有疑惑:var a = [1,2,3]; var b = a; b.push(4); console.log(a); // [1,2,3,4]var c = 1; var d = c; d =2; console.log(c); //