读书笔记-《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() //返回时间戳
相关文章
相关标签/搜索