文章目录
JS中的数据类型及详解
js数据类型分类
基本数据类型
String字符串
Number数字
Boolean布尔
Null空值
Undefined 未定义
Symbol 唯一值类型(ES6新增)
引用数据类型(万物皆对象)
Object 普通对象
Array 数组对象
RegExp 正则对象
Date 日期对象
Math 数学函数对象
number数字类型
let n = 10;
n = 10.5;
n = -10;
n = 0;
n = NaN; //=>NaN:not a number 非有效数字
n = Infinity; //=>正/负无穷大 -Infinity [ɪnˈfɪnəti]
string字符串类型
基于单引号、双引号、反引号(TAB上面的撇)
包起来的都是字符串
let str = ‘’;
str = ‘19’;
str = “我爱你”;
str =我是ES6中新增的模板字符串(``),有助于字符串的拼接
;
str = ‘[object Object]’;
boolean布尔类型
true / false
let boo = true;
boo = false;
空 null
类型
let nu = null;
nu = undefined;
let un; //=>默认值就是undefined
Sumbol
唯一值类型
每一个Symbol()都是一个唯一值
let x = Symbol('爱你');
let y = Symbol('爱你');
console.log(x == y); //=>false
object普通对象:
大括号包起来,里面有零到多组属性名和属性值(键值对),
这些属性名和属性值可以描述当前对象的特征(键:值,多组
键值对用逗号分隔)
let obj = {
name: '珠峰培训',
age: 10,
teachers: 30
};
Array数组对象:
中括号包起来,逗号分隔数组中每一项的值(每一项的值可以是任意类型)
let arr = [10, ‘字符串’, true, null];
RegExp正则对象:
两个斜杠包起来一大堆你看不懂的符号就是正则 O(∩_∩)O哈哈~
let reg = /$[±]?(\d|([0-9]\d+))(.\d+)?^/;
function函数:
function func(x, y) {
let total = x + y;
return total;
}
箭头函数
ES6中的 Array Function 箭头函数
let fn = () => {
};
number类型 数字
• 正数、负数、零、小数
• NaN:not a number 不是一个有效数字
• Infinity:无穷大的值
NaN
NaN不等于NaN,NaN和任何其他值都不相等
isNaN()
用来检测当前这个值是否是非有效数字,如果不是有效数字检测的结果是true,反之为false。
isNaN(0);//->false
isNaN(NaN);//->true
isNaN(‘12’);//->false
//当我们使用isNaN检测时,检测值不是number类型的,浏览器会默认的把值先转化为number类型,再检测
isNaN([]);//->false
isNaN(true);//->false
Numder
Number是JS内置的转换方法,可以把其它数据类型“强制”转换为数字类型。
• 字符串转数字:只要字符串中出现任何一个非有效数字字符,最后的结果都是NaN;空字符串会转为0。
• 把布尔转换为数字:true转换为1 false转换为0
• 把空转换为数字:null转换为0 undefined转换为NaN
• 不能把Symbol类型转换为数字,否则会报错
• 把引用数据类型转换为number,首先需要把引用数据类型转换为字符串(toString),再把字符串转换为number即可。
[]–>’ ’
’ ‘–>0PL:数字例子
Number(’’) //=> 0
Number(’ ') //=> 0
Number(true) //¬=>1
Number(false) ¬//=>0
Number(null) ¬//=>0
Number(undefined) //=¬>NaN
Number(Symbol(13)); //=>Cannot convert a Symbol value to a number
Number({})//=>NaN
Number({name:‘zhufeng’}) //=>NaN
Number(function func() {});//=>NaN
Number([12]) //=>先转为字符串[12]=¬>‘12’;再转数字 ‘12’=¬>12
Number([12,23]) //=>先转为字符串[12,23]¬=>‘12,23’;再转数字 ‘12,23’=->NaN
parseInt([val], [radix])处理机制
• 【val】必须是字符串,如果不是,也要默认转换为字符串
• 【radix】不设置(或者为0):正常都是按照10进制处理,如果字符串是以‘0X’开始的,默认值是16。有效范围2~36,0(就是10),不在范围内就是NaN。
把其他类型数据值转换为number,和Number方法在处理字符串的时候有所区别。
转换规则:把字符串转换为数字类型;如果处理的值不是字符串,需要先转换为字符串然后在去转换为number类型的。
提取规则:从左到右依次查找有效数字字符(符合【radix】进制的内容),直到遇见非有效数字字符为止(不管后面是否还有,都不找了),把找到的转换为数字。
- 如果第一位不是0,就遇到字母就停止解析,并把字母前面的值作为10进制去解析,如果第一个就是字母那么值就是空,空成了NaN,比如:
parseInt(“a”)>parseInt(“”,10)>NaN
parseInt(“10a”)>parseInt(“10”)>parseInt(“10”,10)==>10;- 如果第一位是0,且第2位不是x也和上面一样遇到字母就停止解析,并把字母前面的值作为8进制去解析,比如:
parseInt(“0a”)>parseInt(“0”)>parseInt(“0”,10)>0.
• PS:这个有点特殊,因为0a被解析成了0,还不具备看做是8进制的结构,下面那个就明显了。
parseInt(“010a”)>parseInt(“010”)>parseInt(“10”,8)>8;- 如果第一位是0,且第2位是x那后面也和上面一样遇到字母就停止解析,并把字母前面的值作
为16进制去解析,比如:
parseInt(“0xt”)>parseInt(“”,16)>NaN.
parseInt(“0x12t”)>parseInt(“12”,16)>18.
parseFloat()
在parseInt()的基础上可以识别小数点
pl:
Number(‘12px’) ¬//=>NaN
parseInt(‘12px’) //=¬>12
parseInt(‘px12’) ¬//=>NaN
parseInt(‘12px13’) ¬//=>12
parseInt(‘12.5px’) ¬//=>12
num.toFixed(n)保留两(n)位小数
let n = 3.1415926;
console.log(n.toFixed(2)); //=>“3.14” 保留两位小数
BigInt
ES6中提供了一个新的数据类型,BigInt:管理超过安全数值的数字
console.log(Number.MAX_SAFE_INTEGER); //=>9007199254740991 最大安全数(JS能够有效识别的最大整数)
console.log(9007199254740992 == 9007199254740993); //=>true 应该是不一样的,但是超过了最大数值,JS无法精准计算
String 字符串
在JS中用 单引号/双引号/反引号 包起来的都是字符串
注:单双引号不要混着用
在字符串中我们可以使用\作为转义字符,当表示一些特殊符号时可以使用\进行转义或者换行。
• " 表示 "
• ’ 表示 ’
• \n 表示换行
• \t 制表符
• \ 表示\
var str = 'hello';
// str = 'he'll'o'; 不可以
// str = "he"llo"; 不可以
str = "你说:'你在干嘛'";
str = "我说:\"今天\t天气真不错!\"";
str = "今天\
天气真不错!";
str = "\\\\\\";
把其它数据类型转换为字符串类型
• String([value])
• [value].toString()
普通对象转换为字符串都是 “[object Object]”,数组对象转换为字符串是 “第一项,第二项…”(逗号分隔数组中的每一项)