基础数据类型
- Number
用来表示整数和浮点数,最常用的功能就是用来表示10进制的整数和浮点数
表示的数字大小是有限的,范围是:
± 1.7976931348623157e+308
如果超过了这个范围,则会返回± Infinity
NaN
非数值(Not a Number)是一个特殊的数值,JS中当对数值进行计算时没有结果返回,则返回NaN
转换数据类型
// Number() 可以用来转换任意类型的数据
var num = '123.0012'
Number(num)//123.0012
Number(true)//1
//只能转换字符串类型,其他数据类型则结果是NaN
parseInt(num)//123
parseFloat(num)//123.0012
parseInt(true)//NaN
parseFloat(true)//NaN
判断是否是数值
使用isNaN()函数
isNaN()
函数是js自带的全局函数,isNaN()
函数用于检查其参数是否是非数字值。
如果 值x 是特殊的非数字值NaN
(或者能被转换为这样的值),返回的值就是true
;如果 值x 是其他值,则返回false
。
isNaN()
的缺点就在于null
、空格以及空串会被按照0来处理
isNaN(123)//false
isNaN(-1.23) //false
isNaN(5-2)//false
isNaN(0)//false
isNaN("Hello")//true
isNaN("2005/12/12")//true
isNaN()
会将null
、空格以及空串按照0来处理,所以检查不严谨。所以用加工一下,和typeof
运算符一起使用
// true:数值型的,false:非数值型
function myIsNaN(value) {
return (typeof value === 'number' && !isNaN(value));
}
myIsNaN(10)//true
myIsNaN(null)//false
myIsNaN( )//false
myIsNaN()//false
使用正则表达式
(1)、校验只要是数字(包含正负整数,0以及正负浮点数)就返回true
/**
* 校验只要是数字(包含正负整数,0以及正负浮点数)就返回true
**/
function isNumber(val){
var regPos = /^[0-9]+.?[0-9]*/; //判断是否是数字。
if(regPos.test(val) ){
return true;
}else{
return false;
}
}
(2)、校验正负正数就返回true
/**
* 校验正负正数就返回true
**/
function isIntNum(val){
var regPos = / ^\d+$/; // 非负整数
var regNeg = /^\-[1-9][0-9]*$/; // 负整数
if(regPos.test(val) && regNeg.test(val)){
return true;
}else{
return false;
}
}
利用parseFloat()的返回值
parseFloat() 函数可解析一个字符串,并返回一个浮点数。
该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串。
用法:将参数中指定的字符串解析成为一个浮点数字并返回
/**
* 验证数据 是数字:返回true;不是数字:返回false
**/
function Number(val) {
if (parseFloat(val).toString() == "NaN") {
return false;
} else {
return true;
}
}
isNaN(val)//不能判断空串或一个空格
//如果是一个空串、空格或null,而isNaN是做为数字0进行处理的,
//而parseInt与parseFloat是返回一个错误消息,这个isNaN检查不严密而导致的。
- string
将其他类型转化为string 使用toString()
var a=123
a.toString()//'123'
var obj={}
obj.toString()//'[object Object]'
var arr=[1231.123,123]
arr.toString()// '1231.123,123'
var bol=true
bol.toString()//'true'
字符串的一些方法
拼接
使用 +
,字符串和任何数据类型相加都是得到字符串
var a=123
var b='123'
a+b//'123123'
使用concat()
多个字符串用逗号隔开,返回的是一个新的字符串
concat('123','456','789')//'123456789'
切割
//slice(start,end) //从start位置截取到end位置 ps:如果为负数,是从末尾开始数,start<end
'123456'.slice(1,3) //23
//split(a,n) //将字符串以a分割分割成数组,,返回数组的最大长度为n
'123'.split('')//['1','2','3']
'123'.split('',2)//['1','2']
//substr(start,count) //从start 位置开始截取,长度为count
'153'.substr(0,2)//15
//substring(start,end) //从start位置开始截取到end位置ps:不能为负数,为负数时默认为0
'153'.substring(0,2)//15
查找
//indexOf(a) 通过指定的字符串来查找首次出现的位置,未找到时返回-1
var a='123'
a.indexOf('1')//0
a.indexOf('4')//-1
//includes(a) 判断指定的字符串a是否在字符串中,返回Boolean值
var b='456'
b.includes('4')//true
b.includes('7')//false
//charAt(index) 通过下标来查找字符串
var c='789'
c.charAt(1)//8
替换与复制
//repeat(count) 复制字符指定次数,并将连接起来一起返回
'x'.repeat(3) // "xxx"
//参数是小数,会被取整
'na'.repeat(2.9) // "nana"
//如果repeat的参数是负数或者Infinity,会报错
'na'.repeat(Infinity)// RangeError
'na'.repeat(-1)// RangeError
//replace(str) 查找首个匹配的字符串,并替换
'aabbcc'.replace('b', '_')// 'aa_bcc'
//replaceAll(str) 查找所有匹配的字符串,并替换
'aabbcc'.replaceAll('b', '_')// 'aa__cc'
let s = 'Hello world!';
//startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
s.startsWith('Hello') // true
//endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
s.endsWith('!') // true
补全长度(es6)
//padStart()用于头部补全
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
//padEnd()用于尾部补全
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
- boolean
布尔型也被称为逻辑值类型或者真假值类型
布尔型只能够取真(true
)和假(false
)两种数值。除此以外,其他的值都不被支持
其他的数据类型也可以通过Boolean()
函数转换为布尔类型
- null
Null
类型是第二个只有一个值的数据类型,这个特殊的值是null
从语义上看null表示的是一个空的对象。所以使用typeof检查null会返回一个Object
undefined值实际上是由null值衍生出来的,所以如果比较undefined和null是否相等,会返回true
- undefined
Undefined
类型只有一个值,即特殊的 undefined
在声明变量但未对其加以初始化时,这个变量的值就是 undefined
需要注意的是typeof对没有初始化和没有声明的变量都会返回undefined
- symbol
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型
Symbol 特点
- Symbol 的值是唯一的,用来解决命名冲突的问题
- Symbol 值不能与其他数据进行运算
- Symbol 定义 的对象属 性 不能 使 用 for…in 循 环遍 历 ,但 是可 以 使 用 Reflect.ownKeys 来获取对象的所有键名
//创建 Symbol
var s1 = Symbol();
console.log(s1, typeof s1);//Symbol() 'symbol'
//添加标识的 Symbol
var s2 = Symbol('1');
var s2_2 = Symbol('1');
console.log(s2 == s2_2);//false
//使用 Symbol for 定义
var s3 = Symbol.for('1');
var s3_2 = Symbol.for('1');
console.log(s3 == s3_2);//true
- bigInt
BigInt
只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示
为了与Number
类型区别,BigInt
类型的数据必须添加后缀n
// 超过 53 个二进制位的数值,无法保持精度
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
// 超过 2 的 1024 次方的数值,无法表示
Math.pow(2, 1024) // Infinity
var a = 2172141653n;
var b = 15346349309n;
// BigInt 可以保持精度
a * b // 33334444555566667777n
// 普通整数无法保持精度
Number(a) * Number(b) // 33334444555566670000