读书笔记-《JavaScript高级程序设计》-第3章 数据类型

3.3变量

ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。

3.4 数据类型

由于ECMAScript的变量是松散类型,可以用typeof来检测给定变量的数据类型。typeof是一个操作符而不是函数。

  • undefined
  • boolen
  • string
  • number
  • object(null也是返回这个)
  • function

null值表示一个空指针,undefined值是派生自null值的

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

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

可用Boolean()来转换对应的Boolean值

3.4.5 Number类型

  • 八进制:第一位必须是0,其余是0-7;
  • 十六进制:前两位是0X(0x),后面0-9或者A-F(可小写)

在八进制中,如果字面量的数值超出了范围,那么前面0会被忽略,后面的数值当作十进制解析。

var Num = 019 \\ 19

保存浮点数值需要的内存空间是保存整数值的两倍

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() //返回时间戳

转载于:https://juejin.im/post/5cf2256df265da1bbd4b5ca4

猜你喜欢

转载自blog.csdn.net/weixin_34247032/article/details/91469855