讀書筆記-《JavaScript高級程序設計》-第3章 數據類型

3.3變量

ECMAScript的變量是鬆散類型的,所謂鬆散類型就是能夠用來保存任何類型的數據。bash

3.4 數據類型

因爲ECMAScript的變量是鬆散類型,能夠用typeof來檢測給定變量的數據類型。typeof是一個操做符而不是函數。函數

  • undefined
  • boolen
  • string
  • number
  • object(null也是返回這個)
  • function

null值表示一個空指針,undefined值是派生自null值的spa

console.log(null == undefined ) \\trueprototype

console.log(null === undefined ) \\false指針

可用Boolean()來轉換對應的Boolean值code

3.4.5 Number類型

  • 八進制:第一位必須是0,其他是0-7;
  • 十六進制:前兩位是0X(0x),後面0-9或者A-F(可小寫)

在八進制中,若是字面量的數值超出了範圍,那麼前面0會被忽略,後面的數值看成十進制解析。對象

var Num = 019 \\ 19ip

保存浮點數值須要的內存空間是保存整數值的兩倍內存

Infinity 表示無窮,+Infinity正無窮,-Infinity負無窮字符串

若是某次計算返回了Infinity,那麼該值沒法繼續參與下一次的計算。 用isFinite()能夠判斷一個數值是否是無窮

0除以0都等於NaN

console.log(0/0) // NaN
console.log(1/0) // Infinity
console.log(-1/0) // -Infinity
複製代碼

NaN == NaN //false

isNaN()能夠判斷是否‘不是數值’,它會把傳入的參數嘗試轉換成數值,能夠被轉換,返回false,不能被轉換,返回true

console.log(isNaN(NaN))  // true
console.log(isNaN(10))  // false
console.log(isNaN("10"))  // false
console.log(isNaN("blue")) // true
console.log(isNaN(true)) // false,能夠被轉換成數值1
複製代碼

Number()能夠把任何數據類型轉換成數值

轉換規則:

  • 若是是Boolean,true和false分別返回1和0;
  • 若是是數字,返回該數字
  • 若是是null,返回0,
  • 若是是undefined,返回NaN
  • 若是是字符串
    • 若是字符串只包含數字,轉成十進制的數值
    • 若是字符串包含有效的浮點,轉換成對應的浮點數值
    • 若是字符串包含有效的十六進制格式,轉成相同大小的十進制數值
    • 字符串爲空,返回0
    • 若是包含是除上述外的其餘格式,返回NaN
  • 若是是對象,則調用對象的valueOf()方法,而後按照前面的規則轉換。若是轉換的結果是NaN,則調用的對象的toString()方法,再按照前面的規則轉換

因爲Number()函數在轉換字符串時複雜且不夠合理,所以在處理 整數 的時候更經常使用parseInt()

parseInt()

  • 會忽略前面的空格,直到找到第一個非空格字符
  • 若是第一個字符不是數字或者負號,會返回NaN
  • 若是第一個字符是數字,會繼續解析下一個字符,直到解析完或者遇到非數字字符
  • 能識別十進制、八進制、十六進制
console.log(parseInt())  // NaN
console.log(parseInt("1234blue"))   //1234
console.log(parseInt("0xA"))  //10,十六進制
console.log(parseInt("22.5")) //22,小數點不是有效的數字字符
console.log(parseInt("070"))  //56,八進制
複製代碼

由於在ECMAScript3 JavaScript 引擎中,「070」被當成八進制字面量,而在ECMAScript5 JavaScript 引擎中,parseInt再也不有解析八進制的能力,「070」被轉換成70。所以,parseInt有第二個參數,使用的基數

console.log(parseInt("AF"))  //NaN
console.log(parseInt("AF",16)) //175
console.log(parseInt("070",8))  //56
console.log(parseInt("070"))  //70
複製代碼

parseFloat()

  • 只解析十進制,沒有第二個參數
  • 十六進制字符串會返回0
  • 會忽略前面的0
console.log(parseFloat("1234blue"))  //1234
console.log(parseFloat("0xA"))  // 0
console.log(parseFloat("22.5")) // 22.5
console.log(parseFloat("22.34.5")) //22.34
console.log(parseFloat("0980.5"))  //980.5
console.log(parseFloat("3.125e7"))  //31250000
複製代碼

3.4.6 string類型

toString()方法能夠把一個值轉換成一個字符串,null和undefined沒有這個方法,裏面能夠傳遞參數,表示輸出數值的基數(幾進制)

在不知道要轉換的值是否是null和undefined時,能夠用轉型函數String(),可以將任何類型的值轉換成字符串

  • 若是值有toSting()方法,則調用該方法(沒有參數)返回結果
  • 如是null,返回"null",如是undefined,返回"undefined"

3.4.7 Object類型

Object每一個實例都有下列屬性和方法

  • constructor
  • hasOwnProperty(propertyName)
  • isPrototypeOf(object):用於檢查傳入的對象是不是傳入對象的原型
function object1() {}
const object3 = new object1();
console.log(object1.prototype.isPrototypeOf(object3));
// expected output: true
複製代碼
  • propertyIsEnumerable(propertyName) : 用於檢查給定的屬性是否可以使用for-in語句類枚舉
  • toLocalString() : 用於日期對象,跟根據當地或者指定參數返回該地區的日期格式
  • toString()
  • valueOf() 返回對象的原始值 var timestamp = (new Date()).valueOf() //返回時間戳
相關文章
相關標籤/搜索