JavaScript基础强化笔记-ECMAScript 值与类型
变量
- 第一个字符必须是字母、_ 、$
- 余下的字符可以是下划线、美元符号或者任何数字字符
- 变量不必需要声明、未声明的变量是全局变量
值
ECMAScript中,变量可以存在两种类型的值: 原始值、引用值
原始值 就是变量属于原始类型,因为原始类型的的空间固定,所以可以存储在 栈 中
引用值 就是原始值之外的类型,他们存储在变量处的值是一个指针(point),真正的值存储在内存处 堆
类型
概述
原始类型
5种原始类型
- Undefined
- Null
- Boolean
- Number
- String
typeof运算符用于判断一个值是否在某种类型的范围内。
详细
Undefined
- Undefined 类型只有一个值,即
undefined
. - 当声明的变量未初始化时,该变量的默认值是
undefined
- 例如
var a
- 例如
- Undefined不等于未定义,等于未赋值
Null
- Null类型也只有一个值->null
- undefined实际上就是从null派生出来的,因此ECMAScript认为他们相等。
- 虽然两值相等但是null表示对象不存在,undefined表示对象未赋值。
Boolean
- Boolean类型是ECMAScript中最常见的类型之一。
- 两个值true和false。
- false不等于0但是必要时0也可以被转换为false。
Number
JavaScript只有一种数字类型,可以使用也可以不使用小数点来书写数字。
JavaScript不是类型语言,不定义不同类型的数字(整数、短、长、浮点)。
JavaScript中的所有数字都存储为根为10的64为(8比特),浮点数。
精度
- 整数(不使用小数点或者科学记数法时):15位
- 小数的最大位是17,但是浮点运算不是很准确
八进制和十六进制
- 如果前缀为0,则会被识别为八进制
- 如果前缀为0x则会被识别为十六进制
绝对不要在数字前面写零,除非你需要进行八进制转换
- 既可以表示32位整数也可以表示64位浮点数
- 0开头的为八进制,0x开头的为十六进制
- 所有计算返回的值都为十进制
- 要定义浮点数,必须包括小数点和小数点后的一位数字
- 浮点值在计算之前真正存储的是字符串
- ECMAScript默认把具有6个或6个以上的前导0的浮点数转换为科学记数法
有几个特殊值也被定义为Number类型:
- Number.MAX_VALUE 上边界
- Number.MIN_VALUE 下边界
- Number.POSITIVE_INFINITY 大于边界的值
- Number.NEGATIVE_INFINITY 小于边界的值
- Number.POSITIVE_INFINITY 无穷大
- Number.NEGATIVE_INFINITY 无穷小
- NaN 当一个对象转化为数组时,因为没有与它 相等的值就会返回NaN
- NaN本身并不相等
NaN == NaN //false
- 不推荐使用NaN本身,推荐使用isNaN()
String
- 是唯一没有固定大小的原始类型。可以用字符串存储0或者更多的Unicode字符,用16位整数表示。
字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表符 |
\b | 空格 |
\r | 回车 |
\f | 换页符 |
\ | 反斜杠 |
\’ | 单引号 |
\” | 双引号 |
\0nnn | 八进制代码 nnn 表示的字符(n 是 0 到 7 中的一个八进制数字) |
\xnn | 十六进制代码 nn 表示的字符(n 是 0 到 F 中的一个十六进制数字) |
\unnnn | 十六进制代码 nnnn 表示的 Unicode 字符(n 是 0 到 F 中的一个十六进制数字) |
类型转换
ECMAScript的Boolean值、数字和字符串的原始值的有趣之处在于他们都是伪对象,这意味着他们实际上具有属性和方法。
转换成数字:
- parseInt() 和 parseFloat()用来将字符串转换为数值
- 会从0位置依次转换,’1233asc’->’1233’、’s23232’->’NaN’
- parseFloat()转换为浮点型,但是必须为 十进制
强制类型转换
- Boolean() 函数
- Number() 函数 必须整完全可以转换否者NaN
- String() 函数 和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误
关于类型转换
typeof只能判断JavaScript的5中原始类型,而且typeof作为运算符会有很多坑。
所以在判断对象时,最好使用 Object.prototype.toString.call()
方法。
判断对象属于哪种内置对象类型。
Object.prototype.toString.call(123)
会进行以下操作:
- 获取对象的类名:(对象类型)
- 将[Object、 获取的对象类型的名、]组合为字符串。
- 返回第二步的字符串’[object Array]’
因为JavaScript中一切都是对象,所有任何都可用:
console.log(Object.prototype.toString.call(123)) //"[object Number]"
console.log(Object.prototype.toString.call('123')) //"[object String]"
console.log(Object.prototype.toString.call(undefined)) //"[object Undefined]"
console.log(Object.prototype.toString.call(true)) //"[object Boolean]"
console.log(Object.prototype.toString.call(null)) //"[object Null]"
console.log(Object.prototype.toString.call({})) //"[object Object]"
console.log(Object.prototype.toString.call([])) //"[object Array]"
console.log(Object.prototype.toString.call(function(){})) //"[object Function]"
关于typeof
- 对于null、数组、{}、正则表达式都返回object
- 对于NaN返回’number’