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); //