JS高级程序设计【红宝书】学习笔记——数据类型

目录

数据类型

Number类型

1.值的范围

2.NaN

3.数值转换

String类型

1.字符字面量(详见JS高级程序设计P63

2.转换为字符串

Symbol类型

Object类型

object实例的属性和方法:


数据类型

Number类型

1.值的范围

        ECMAScript可表示的最小数值:Number.MIN_VALUE (多数浏览器中表示5e-324),可表示的最大数值:Number.MAX_VALUE (多数浏览器中表示1.7976931348623157e+308)

        如果计算值超过JavaScript可表示的范围,转换为Infinity(正)无穷值,-Infinity(负)无穷值。判断是否是有限大,使用isFinite()函数

let result = Number.Max_VALUE;
console.log(isFinite(result)); //false

2.NaN

特殊数值“不是数值”(Not a Number)

console.log(NaN ==NaN); //false

console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false
console.log(isNaN("10")); //false,字符串转换为数值10
console.log(isNaN("blue")); //true,不可以转换为数值
console.log(isNaN(true)); //false,可以转换为数值1

3.数值转换

Number()函数:

  • 布尔值,true转换为1,false转换为0
  • 数值,直接返回
  • null,返回0
  • undefined,返回NaN
  • 字符串
  1. 数字字符:十进制忽略前面的0,直接转换,十六进制,返回十进制整数
  2. 空字符串:返回0
  3. 其他:返回NaN
  • 对象,调用valueOf(),按照上述规则转换返回值,如果转换结果是NaN,测调用toString()方法,再按照转换字符串的规则转换
console.log(Number("Hello world!")); //NaN
console.log(Number("")); //0
console.log(Number("00011")); //11
console.log(Number(true)); //1

parseInt()函数:

        更关注字符串是否包含数值模式,字符串前面的空格会被忽略,第一个非空格字符不是数值字符、加减号,直接返回NaN【这意味着空字符串也会NaN】

console.log(parseInt("1234blue")); //1234
console.log(parseInt("")); //NaN
console.log(parseInt("0xA")); //10
console.log(parseInt(22.5)); //22
console.log(parseInt("70")); //70
console.log(parseInt("0xf")); //15

该函数也接受第二个参数为,指定底数(进制数)

console.log(parseInt("0xAF",16)); //175
console.log(parseInt("AF",16)); //175
console.log(parseInt("AF")); //NaN

parseFloat()函数:

        类似parseInt()函数,但只识别第一个小数点,但该函数直解析十进制数,十六进制始终返回0,没有指定底数(进制数)

  1. console.log(parseInt("1234blue")); //1234
    console.log(parseInt("")); //NaN
    console.log(parseInt("0xA")); //0
    console.log(parseInt("22.5"")); //22.5
    console.log(parseInt("22.34.5"")); //22.34
    console.log(parseInt("0908.5")); //908.5
    console.log(parseInt("3.125e7")); //31250000

String类型

1.字符字面量(详见JS高级程序设计P63

2.转换为字符串

  • toString()方法

        可见于数值、布尔值、对象和字符串值(字符串值只是简单的返回自身的一个副本)

        null和undefined值没有toString()方法

        一般情况下,该方法不接受任何参数,对数值调用时,可以接受一个底数参数(进制数)

let a = true;
let aa = a.toString();//字符串"true"
  • String()转型函数

        始终返回表示相应类型值的字符串

        如果值有toString()方法,则调用该方法(不传参数)并返回结果

        如果值为null,返回"null"

        如果值为undefined,返回"undefined"

let value3 = null;
console.log(String(value3));//"null" 同理undefined
  • 模板字面量

        ES6新增,跨行定义字符串,保留反引号内部的空格、换行

  • 字符串插值

        通过在${}中使用一个JavaScript表达式实现

let value = 5;
let str = `this is ${ value }`;
console.log(str); // this is 5

        所有插入的值都会使用toString()强制转型为字符串

        在插值表达式中可以调用函数和方法:

function capitalize(word) {
    return `${word[0].toUpperCase()}${word.slice(1)}`
}
console.log(`${capitalize('hello')}`)//Hello
let a = 6,
    b = 9

function simpleTag(strings, aValExpression, Bval, sum) {
    console.log(strings)
    console.log(aValExpression)
    console.log(Bval)
    console.log(sum)
    return 'foobar'
}
let str1 = `${ a } + ${ b } = ${ a+b }`;

let str2 = simpleTag`${a}+${b} = ${a+b}`;
// [ '', '+', ' = ', '' ]
// 6
// 9
// 15

console.log(str1)// 6 + 9 = 15
console.log(str2)// foobar


function zipTag(strings, ...expressions) {
    return strings[0] + expressions.map((e, i) => `${e}${strings[i+1]}`).join('')
}
let aaa = zipTag `${12} + ${44}`//后面直接加上模板字符串,这是一个标签函数
console.log(aaa)//12 + 44

Symbol类型

ES6新型的数据类型,详见js高级P69-80

Object类型

一组数据和功能的集合,object的实例本身并不是很有用,但理解与它相关的概念非常重要。

在es中Object是派生其他对象的几类,该类型的所有属性和方法在派生的对象上同样存在

object实例的属性和方法:

  1. constructor:创建当前对象的函数,该属性的值就是Object()
  2. hasOwnProperty(propertyName):用于判断当前对象实例(不是原型)是否存在给定的属性【o.hasOwnProperty("name")】
  3. isPrototypeOf(object):用于判断当前对象是否为另一个对象的原型
  4. propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用
  5. toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境
  6. toString():返回对象的字符串表示
  7. valueOf():返回对象对应的字符串、数值、布尔值表示,通常与toString()的返回值相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值