2018/08/01
ECMAScript中有5種簡單(基本)數(shù)據(jù)類型以及1種復雜數(shù)據(jù)類型梦谜。
5種簡單數(shù)據(jù)類型--Undefined, Null, Boolean, Number, String
1種復雜數(shù)據(jù)類型--Object
在談論數(shù)據(jù)類型之前颂斜, 可以先說說typeof操作符驱入。
使用方式 : typeof 變量名或變量
舉例:
1. typeof "string" //string
2. let abc = 2
typeof abc //number
3. let a = function () {return}
typeof a //function
typeof 的返回值:
返回值 | 意義 |
---|---|
undefined | 這個值未定義 |
boolean | 布爾值false or true |
string | 字符串 |
number | 數(shù)值 |
function | 函數(shù) |
object | 對象或者null |
- Undefined類型
此類型只有一個值--undefined
let message
console.log(message == undefined) //true
let message = undefined
console.log(message == undefined) //true
若不定義變量直接使用則會報錯并不是Undefined, 但是使用typeof
檢測也是為undefined
console.log(age) //ReferenceError: age is not defined
console.log(typeof age) //undefined
- Null類型
Null類型也只有一個值------null贤旷。
從邏輯角度來看, null值表示一個空對象指針贱傀, 而這也正是使用typeof檢測null返回object的原因
let car = null
console.log(typeof car) //object
如果定義的變量準備在將來用于保存對象轴合, 最好將變量初始化為null
if (car != null) {
//執(zhí)行操作
}
undefined值是派生自null值的 ?平酿?凤优??r诒恕V妗!P夷妗棍辕!
所以 console.log(undefined == null) //true
但是 console.log(undefined === null) //false
- Boolean類型
該類型有兩個字面值---true and false
值得注意的是這兩個值與數(shù)字之不是一回事暮现, true不一定等于1, false不一定等于0痢毒。 并且字面值true和false是區(qū)分大小寫的送矩。True和False都不是布爾值,只是標識符
在ECMAScript中所有類型的值都有與這兩個Boolean值等價的值哪替。要將一個值轉換為其對應的Boolea值,可以調用Boolean()菇怀,其總會返回一個布爾值
let message = 'Hello World'
let messageBoolean = Boolean(message)
轉換規(guī)則
數(shù)據(jù)類型 | 轉換為true | 轉換為false |
---|---|---|
Boolean | true | false |
String | 非空字符串 | ''和"" |
Number | 非0數(shù)值 | 0和NaN |
Object | 任意對象 | null |
Undefined | N/A | undefined |
常用于if語句的判斷
- Number類型
Number類型分為整數(shù)和浮點數(shù)凭舶, 也支持不同的數(shù)值字面量格式(八進制,十六進制)爱沟,在進行算術計算是帅霜,所有八進制和十六進制表示的數(shù)值都是十進制數(shù)值。
浮點數(shù)
let num1 = 1.1
let num2 = 0.1
let num3 = .1 //也能用呼伸,結果為0.1
浮點數(shù)所占內存是整數(shù)值的兩倍身冀,ECMAScript會將其轉換。
let num1 = 1. // 結果為1 整數(shù)
let num2 = 10.1 //結果為10 整數(shù)
在浮點數(shù)中括享,最高精度是17位小數(shù)搂根,但是在進行整數(shù)計算時精確度遠遠不如整數(shù), 0.1+0.2的結果不是0.3 而是0.30000000000000004
console.log(0.1+0.2 == 0.3) //false
在此例子中铃辖,如果這兩個數(shù)是0.05和0.25就不會有問題 【需要深入的學習一下剩愧! Mark了】
NaN
NaN既非數(shù)值是一個特殊的數(shù)值,用來表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況(這樣就不會拋出錯誤了)娇斩。
console.log(0/'a') //NaN
NaN本身有2個特點仁卷。
- 任何NaN的操作都會返回NaN
console.log(NaN/10) //NaN
- NaN本身與任何值都不相等,包括NaN本身
console.log(NaN == NaN) false
ECMAScript定義了isNaN(value)函數(shù)犬第,判斷value是否"不是數(shù)值",并且它會自動嘗試將這個值轉換為數(shù)值
console.log(isNaN(NaN)) //true
console.log(isNaN(10)) //false (10是一個數(shù)值)
console.log(isNaN("10")) //false ("10"可以被轉換為10)
console.log(isNaN("blue")) //true
console.log(isNaN(true)) //false(可以被轉化為1)
isNaN同樣適用于object锦积, 當基于對象調用時,會調用對象的valueOf()方法歉嗓, 然后再確定該方法的返回值是否可以轉換丰介, 如果不能則調用toString()方法,再測試返回值
//今天寫到這兒遥椿,明天從數(shù)值轉換開始基矮,明天寫完這個章節(jié) 2018/08/01 23:24
//剛剛我女朋友讓我自己掏錢給她篆刻印章
2018-08-03
數(shù)值轉換
JavaScript中有3個函數(shù)可以把非數(shù)值轉換為數(shù)值
方法名 | 作用 |
---|---|
Number() | 可以用于任何數(shù)據(jù)類型 |
parseInt() | 轉換字符串為整形 |
parseFloat() | 轉換字符串為浮點型 |
- Number()的轉換規(guī)則如下
Boolean值: [true, false] => [1, 0]
數(shù)字值: 直接返回
null值: 返回0
undefined: 返回NaN
字符串: [空 => 0], 數(shù)字轉換為十進制值['123' => 123, '011' => 11]
Number('Hello World') //NaN
Number('') //0
Number('000011') //11
Number(true) //1
- parseInt(value, format)
此函數(shù)在轉換字符串的時候,更多的是看其是否符合數(shù)值模式冠场!它會自動忽略空格家浇, 直到找到第一個非空字符, 若第一個不是數(shù)字字符或者符號碴裙,則返回NaN, 若為規(guī)定字符钢悲, 則會繼續(xù)下去点额,直到碰到了下一個非數(shù)字字符。
parseInt('1234blue') //1234
parseInt('') //NaN
parseInt(22.5) //22
parseInt()的第二個參數(shù)規(guī)定了其轉換時使用的基數(shù)(即多少進制) 參考參數(shù)[2, 8, 16], 指定這個參數(shù)非常有必要莺琳。
- parseFloat(value, format)
parseFloat()跟parseInt()類似, 只是parseFloat()在解析時碰到第一個小數(shù)點也能繼續(xù)解析下去还棱。
parseFloat(.1) //0.1
- String類型
Sting類型用于表示0或者多個16位Unicode字符組成的字符序列,就是字符串惭等。
ECMAScript中的字符串是不可變的, 也就是說, 字符串一旦創(chuàng)建珍手,他們的值就不能改變。 若要改變某個變量保存的字符串辞做,首先要銷毀原來的字符串琳要,然后再用一個新的字符串填充變量。
let lang = 'Java'
lang = lang + 'Script'
上例中的變量lang初始為字符串'Java'秤茅, 第二行l(wèi)ang被賦值為'JavaScript'稚补。 第二行背后的操作為: 首相創(chuàng)建了一個能容納10個字符的新字符串,然后在此字符串中填充'Java'和'Script'框喳, 最后銷毀原來的'Java'和字符串'Script', 都是在后臺發(fā)生的课幕。
轉換為字符串
有兩種方法可以轉換其他類型為字符串toString(), String()
- toString()方法, 幾乎所有值都有這個方法五垮,此方法的返回值為:將其返回為相應的字符串
let age = 11
console.log(age.toString()) //'11'
let found = true
console.log(found.toString()) //true
toString方法可以傳遞一個參數(shù)為輸出值的基數(shù)(進制數(shù))
let num = 10
num.toString() //"10"
num.toString(2) //"1010"
num.toString(8) //"12"
2018/08/04
toString()的返回值是一個關于結果的字符串乍惊。
- String(), 在不知道轉換的值是否為null或者undefined的情況下拼余, 就可以使用該函數(shù)污桦。其轉換規(guī)則如下。
=> 1. 如果值有toString()方法匙监, 則返回該結果
=> 2. 如果是null, 返回'null'
=> 3. 如果是undefined, 返回'undefined'
String(10) //'10'
String(true) //true
String(undefined) //'undefined'
String(null) //'null'
上例中凡橱, 數(shù)字與布爾值直接通過toString()調用, null和undefined沒有toString()直接返回字面量亭姥。
- Object類型
ECMAScript中的對象其實就是一組數(shù)據(jù)和功能的集合稼钩, 可以通過執(zhí)行new操作符后跟要穿件的對象類型的名稱來創(chuàng)建。
let o1 = new Object()
特別的达罗,如果不給構造函數(shù)傳遞參數(shù)則可以使用
let 02 = new Object //可以使用但不推薦
在ECMAScript中坝撑,Object類型是所有它的實例的基礎。所有實例都會繼承Object類型的方法和屬性粮揉。
Object所具有的屬性和方法
方法名 | 作用 |
---|---|
constructor | 構造函數(shù) |
hasOwenProperty(propertyName) | 檢查給定的屬性在當前對象的實例中是否存在巡李,而不是原型中 |
isPrototypeOf(Object) | 傳入的對象是否是當前對象的原型 |
propertyIsEnumerable | 是否可以枚舉 |
toLocalString() | 返回與執(zhí)行環(huán)境地區(qū)對應的對象字符串表示 |
toString() | 返回對象的字符串表示 |
valueOf() | 返回對象的字符串,數(shù)值或布爾值表示扶认,通常與toString()類型 |
//我女朋友還沒醒 2018/08/04 9.47