注册 登录

清河洛

Javascript中的原始值

qingheluo2016-12-16清河洛334
目前Javascript中有7种基础不可变数据类型,称之为原始值原始值一旦创建就无法更改,重新赋值是为变量重新分配一个值,之前的值并未改变,会被垃圾回收机制回收Null、Undefined、Boolean、Number、BigInt、String、Symbol Javascript不支持任何创建自定义类型,所有值都必须为以上7中数据类型之一使用typeof运算符可以获取数据的类型有一个特殊的就是null,返回object,所以判断null时使用"===null"Null只有一个值null,表示没有任何对象Undefined只有一个值undefined,表示没有任何值当需要显式的为一个变量...

目前Javascript中有7种基础不可变数据类型,称之为原始值

原始值一旦创建就无法更改,重新赋值是为变量重新分配一个值,之前的值并未改变,会被垃圾回收机制回收

Null、Undefined、Boolean、Number、BigInt、String、Symbol

Javascript不支持任何创建自定义类型,所有值都必须为以上7中数据类型之一

使用typeof运算符可以获取数据的类型

有一个特殊的就是null,返回object,所以判断null时使用"===null"

Null

只有一个值null,表示没有任何对象

Undefined

只有一个值undefined,表示没有任何值

当需要显式的为一个变量赋值undefined时,使用void val语句

因为在javascript中,undefined不是保留关键字,也就是说可以作为变量名

let undefined = 2;
let name = undefined;
//此时name的值是2,而并不是我们预期的undefined

void val语句不管val为什么值,都会返回undefined,可以理解成这是一个专门用来生成undefined值的运算符
let undefined = 2;
let name = void 0;
    通常情况下我们一般使用0,当然你也可以使用其他值

Boolean

有true和false两个值

任何其他类型值的都可以转化为bool值(Null和Undefin)

String:任何非空字符串为ture,空字符串为false;
Number:任何非零数字值(包括无穷大)为ture,0和NaN为false
Object:任何非null的对象为ture,null为false
Undefined:为false

Number

表示2-1074和21024之间的正浮点数和-2-1074和-21024之间的负浮点数

首先浮点数由于计算机的存储机制问题本身就无法保证精度

其次对于整数来讲,javascript中仅能安全的存储在-(253 − 1)到(253 − 1)范围的整数,超出这个范围将使用双精度浮点数的指数方式近似表示

Number.isSafeInteger(num):确定一个整数是否在安全存储范围内

Number.isInteger():确定传递的值类型是Number,且是整数

isFinite(num):测试一个数值是否在规定范围内

Javascript会自动将可以转换为整型的浮点数值转成为整型

var box = 12.0; //小数点后面是0,转成为整型12

在定义比较长的Number时,可以使用下划线进行分割用来更加容易阅读,在编译时会忽略下划线

let num = 12_3456_7890;
console.log(num); //1234567890

指定整数的进制(浮点数只能是十进制)

前导0表示8进制

    var box = 070; //八进制,56
    var box = 079;//无效的八进制,解析为十进制

前导0x或0X表示十六进制(不区分大小写)

    var box = 0xA;//十六进制,10
    var box = 0x1f;//十六进制,31

一些相关的常量

Number.MIN_SAFE_INTEGER:表示-(253 − 1)的值

Number.MAX_SAFE_INTEGER:表示(253 − 1)的值

Number.MAX_VALUE:表示21024的值

大于该值被转换为+Infinity
小于-Number.MAX_VALUE的值被转为为-Infinity

Number.MIN_VALUE:表示2-1074的值

小于该值的正数被转换为+0
大于-Number.MIN_VALUE的值被转换为-0

Number.POSITIVE_INFINITY:表示Infinity

Number.NEGATIVE_INFINITY:表示-Infinity

0同时表示 -0 和 +0 ( 0 是 +0 的别名)

+0 === -0 表达式返回的是 true
然而,当0为除数时:
    console.log(42 / +0); // Infinity
    console.log(42 / -0); // -Infinity

NaN是一个特殊种类的数值,当算术运算的结果不能用数值表达时,会返回NaN,它是JavaScript中唯一不等于自身的值

isNaN(num)用来判断num是不是NaN,在接收到一个值之后,会尝试将这个值转换为数值

Number.NaN表示NaN值

toString()方法可以把所有类型的数据转换成字符串,一般不需要传参,但在数值转成字符串的时候,可以传递进制参数

var box = 10;
console.log(box.toString()); //10,默认输出
console.log(box.toString(2)); //1010,二进制输出
console.log(box.toString(8)); //12,八进制输出
console.log(box.toString(10)); //10,十进制输出
console.log(box.toString(16)); //a,十六进制输出

parseFloat(val):将val转换为浮点数

Number和BigInt之外的数据类型会先转换为字符串类型,然后对字符串进行解析
识别正号(+)、负号(-)、数字(0-9)、第一个小数点(.)、科学记数法中的指数(e 或 E)
会将第一个不是以上字符之前的所有字符解析,之后的字符忽略
参数首位和末位的空白符会被忽略
如果第一个字符不能转换为数字,返回NaN
可以解析并返回 Infinity
解析BigInt为Numbers, 丢失精度,因为末位n字符被丢弃

parseInt(val,radix=0):将val转换为10进制整数

第2个参数指定要解析的val的进制,有效值2-36,不指定或为0会根据字符串内容推算
Number和BigInt之外的数据类型会先转换为字符串类型,然后对字符串进行解析
识别正号(+)、负号(-)、数字(0-9)、在指定进制中的英文字符、科学记数法中的指数(e 或 E)
会将第一个不是以上字符之前的所有字符解析,之后的字符忽略
参数首位和末位的空白符会被忽略
如果第一个字符不能转换为数字或radix在2-36范围之外,返回NaN
解析BigInt为Numbers, 丢失精度,因为末位n字符被丢弃

保留指定位小数,位与Number原型对象中的toFixed()方法

Number.prototype.toFixed(digits=0):将数字保留小数点后digits位(超过20可能会出错)并转化为字符串

BigInt

表示数字的原始值,它可以表示任意大小的整数

使用BigInt可以安全地存储和操作巨大的整数,甚至超过Number的安全整数限制(Number.MAX_SAFE_INTEGER)

BigInt是通过将 n 附加到整数末尾或调用 BigInt() 函数来创建的

let num1 = BigInt(Number.MIN_SAFE_INTEGER*2);
let num2 = 456541n; //最后有一个字母n

BigInt类型不能使用常规算术运算中的无符号右移运算符(>>>)

BigInt类型不会被隐式转换,如果在计算过程中必须进行隐式转换(如与Number类型进行运算)则抛出异常

String

表示文本数据并编码为UTF-16代码单位的16位无符号整数值序列

字符串中的每个元素在字符串中占据一个位置

第一个元素的索引为 0,下一个是索引 1,依此类推

字符串的长度是其中的UTF-16代码单元的数量,这可能与Unicode字符的实际数量不符

字符串可以由双引号(")、单引号(')或反引号(`)表示

1、反引号可以用来定义多行字符串
2、反引号中可以直接在字符串中间引用变量,使用${}包含变量,如`this is ${name}’s blog`

String类型包含了一些特殊的字符字面量,也叫 转义序列:

\n 换行   \t 制表   \b 空格
\r 回车   \f 进纸   \\ 斜杠
\' 单引号   \" 双引号
\xnn  十六进制,nn表示一个字符(0~F),例:\x41
\unnn 以十六进制代码nnn表示的一个Unicode字符(0~F),例:\u03a3

Symbol

唯一并且不可变的原始值并且可以用来作为对象属性的键

在某些程序语言当中,Symbol也被称作“原子类型”(atom)

symbol的目的是去创建一个唯一属性键,保证不会与其它代码中的键产生冲突

Symbol类型不会被隐式转换,如果在计算过程中必须进行隐式转换则抛出异常

原始值类型互转:

使用类型名称直接运行即可转换一个值为指定的数据类型(Null和Undefined除外)

Boolean(val)
Number(val)
BigInt(val)
String(val)
Symbol(val)

类型转换

在Javascript中如果涉及到数据类型转换,原始值之间转换比较容易,如果一个对象要转换为原始值,那么

1、首先运行该对象的valueOf()方法,如果返回值为原始值那么就用该值
2、如果不是原始值那么使用toString()方法返回字符串类型


网址导航