JavaScript—数据类型02

基本数据类型

一,number(数字)

1,数字分类:

整数:

let numInt=123

浮点数

let numFloat1=12.3
let numFloat2=12. // 小数点后没有数字,识别为12
let numFloat3=.123 //小数点前没有数字,识别为0.123,不建议这种写法
let numFloat4=123.0 //识别为123

特殊数字

Number.MAX_VALUE // 1.7976931348623157e+308->JavaScript中的最大值
Number.MIN_VALUE //5e-324->JavaScript中的最小值
Number.MAX_SAFE_INTEGER //9007199254740991->最大安全整数
Number.MIN_SAFE_INTEGER // -9007199254740991->最小安全整数
Number.POSITIVE_INFINITY //Infinity->正无穷
Number.NEGATIVE_INFINITY //-Infinity->负无穷
Number.EPSILON //2.220446049250313e-16->一个极小值,用于检测计算结果是否在误差范围内
Number.NaN //NaN->表示非数字
Infinity // 无穷大
-Infinity // 负无穷

NaN

console.log(typeof NaN) // number
//NaN与任何值都不相等,包括NaN本身
console.log(NaN===NaN) // false
//任意数和NaN进行计算都是NaN
console.log(NaN/1) //NaN
2.数据计算

浮点数字计算会出现精度差异,最高精度是17位,数字计算是先转换成二进制计算,再转换成十进制.

  • 为什么0.1+0.3不等于0.3?
let num1=0.1,num2=0.2
//0.1,0.2转二进制会出现无限循环位数,超出位数会被舍弃
console.log(num1.toString(2)) // 0.0001100110011001100110011001100110011001100110011001101
console.log(num2.toString(2)) //0.001100110011001100110011001100110011001100110011001101
//0.1+0.2:0.0100110011001100110011001100110011001100110011001101->转换为十进制为0.30000000000000004
console.log(num1+num2) //0.30000000000000004
  • 解决精度差问题
    toFixed
console.log((0.1+0.2).toFixed(1)) // 0.3
// toFixed处理返回的数据类型是string类型,如果需要数字类型需要转换
console.log(typeof (0.1+0.2).toFixed(1)) //string
console.log(typeof Number((0.1+0.2).toFixed(1))) // number

Math.round
在处理已知位数的数据,又不想在小数点后多加0的场景,可以使用Math.round

console.log(Math.round((0.1+0.2)*10/10)//0.3
3.数据进制

十进制

let num1=123//123

二进制
二进制数字前面加上前缀’0b’

let num1=0b010//十进制的2

八进制
八进制的值第一位是0,后面每一位数的范围在0-7,如果某一位数超出范围,首位的0会被忽略,后面的数值会按照十进制解析.

let num1=060 //十进制的48
let num2=069 //无效的八进制数值->解析为十进制的69
let num3=08 // 无效的八进制数->解析为8

用前缀0表示的八进制字面量在严格模式下是无效的,会报错,需要用前缀0o表示.

十六进制
十六进制的值前两位是0x,后面每一位十六进制数字的范围在0-9及A-F,字母A-Fkeyi大写也可以小写.

let num1=0x60 // 十进制的96(16*6)
let num2=0x69 //解析为十进制105(16*6+9)
let num3=0xA //解析为十进制10

进制间转换

let a=123
// 十进制转其他进制
console.log(a.toString(2)) // 1111011
console.log(a.toString(8)) // 173
console.log(a.toString(16)) //7b
// 其他进制转十进制
console.log(parseInt(1111011,2)) // 123
console.log(parseInt(173,8)) // 123
console.log(parseInt('7b',16)) // 123

不同进制间计算,计算结果都会先转成十进制

//八进制与八进制数值相加
console.log(010+020) // 24
// 十六进制与十六进制数值相加
console.log(0x10+0x20) // 48
// 八进制与十六进制数值相加
console.log(0x10+020) // 32
//十六进制与二进制数值相加
console.log(0x10+0b101) // 21
// 十六进制与十进制数值相加
console.log(0x10+12) // 28

二,String(字符串)

1.字符串定义

字符串可以是插入到引号中的任何字符。双引号( " )、单引号( ’ )或反引号(`)标识

let name1 = "abc";
let name2 = 'abc';
let name3 = `abc`;
2.字符串常用方法
方法描述
charAt()返回指定索引位置的字符
charCodeAt()返回指定索引位置字符的 Unicode 值
concat()连接两个或多个字符串,返回连接后的字符串
fromCharCode()将 Unicode 转换为字符串
indexOf()返回字符串中检索指定字符第一次出现的位置
lastIndexOf()返回字符串中检索指定字符最后一次出现的位置
localeCompare()用本地特定的顺序来比较两个字符串
match()找到一个或多个正则表达式的匹配
replace()替换与正则表达式匹配的子串
search()检索与正则表达式相匹配的值
slice()提取字符串的片断,并在新的字符串中返回被提取的部分
split()把字符串分割为子字符串数组
substr()从起始索引号提取字符串中指定数目的字符
substring()提取字符串中两个指定的索引号之间的字符
toLocaleLowerCase()根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLocaleUpperCase()根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLowerCase()把字符串转换为小写
toString()返回字符串对象值
toUpperCase()把字符串转换为大写
trim()移除字符串首尾空白
valueOf()返回某个字符串对象的原始值

三,Blooean(布尔)

Blooean值:有2个值,true/false

Blooean值转换
在这里插入图片描述

数据类型转换为 true 的值转换为 false 的值
Booleantruefalse
Number非零数值(包括无穷值)0、NaN
String非空字符串‘’(空字符串)
Undefinedundefined
Object任意对象null

四,undefind(未定义):只有undefind值

Undefined 类型只有一个值,即undefined。在声明变量但是没有初始化时,这个变量的值就是undefined。

正常情况下,调用未声明的变量会报错,但是对未声明的变量使用typeof操作符,同样会返回"undefined"

var name;
// age 未声明
console.log(typeof name); // "undefined"
console.log(typeof age); // "undefined"

五,null(空):只有null值

null使用typeof返回值是object

console.log(typeof null); // "object"

六,Symbol:ES6新加的数据类型,表示独一无二的值

ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。

//没有参数的情况
let s1=Symbol();
let s2-Symbol();
s1===s2 // false
let s3=Symbol('abc')
let s4=Symbol('abc')
s3===s4 // false

Symbol值不能与其他类型的值进行运算,会报错

let s=Symbol('abc')
s+'def' //  Uncaught TypeError: Cannot convert a Symbol value to a string
`${s}def` //  Uncaught TypeError: Cannot convert a Symbol value to a string

Symbol作为属性名

let mySymbol = Symbol();
// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
let a = {
  [mySymbol]: 'Hello!'
};
// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

3.属性遍历
Symbol 值作为属性名,遍历对象的时候,该属性不会出现在for…in、for…of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。
4.Symbol.for(),Symbol.keyFor()
有时,我们希望重新使用同一个 Symbol 值,Symbol.for()方法可以做到这一点。它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建一个以该字符串为名称的 Symbol 值,并将其注册到全局。

let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
s1 === s2 // true

let s3 = Symbol.for("foo");
Symbol.keyFor(s3) // "foo"

let s4 = Symbol("foo");
Symbol.keyFor(s4) // undefined

七,BigInt(任意精度整数):可以操作存储大整数据

1,创建BigInt可以在数值后面加n

typeof(123n) //'bigint'

在 JavaScript 中,所有数字都以 64 位浮点格式(IEEE 754 标准)存储。
使用此标准,大整数无法精确表示,并且将被舍入。
因此,JavaScript 只能安全地表示整数:
最多 9007199254740991 +(253-1)
低至 -9007199254740991 -(253-1).
超出此范围的整数值会丢失精度。

引用类型

八,object(对象):任意对象

1,创建object

//通过new关键字创建
let obj new Object(); //创建空对象
obj.name='lily'//往对象中添加属性
let obj1={
name:'lily',
age:20
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值