JS数据类型
- 本人小盆友一枚,本系列为个人学习总结,主要为基础知识,主要目的在于督促自己建立完整的知识体系,查缺补漏,回归基础;
- 错误肯定有,需进一步完善,分享出来,希望对于自己和他人有用;
- 错误之处,请留言,我会及时修正;
- 此外,因此系列文章为基础知识,大佬可略过,希望不会浪费你的时间;
一、数据类型(7种)
- 第一种划分方式:
(1)基本数据类型:Number、String、Boolean、Symbol(ES6)
(2)特殊数据类型:Null、Undefined
(3)复杂数据类型:Object(Array,Date,RegExp,Function,)、Symbol(ES6)
- 第二种划分方式:
(1)原始类型(primitive):储存简单数据类型;包括:Number、String、Boolean、Null、Undefined、Symbol(ES6)
(2)引用类型(reference):储存对象,对象在内存中位置的引用;包括:Object
(一)基本类型:Number、String、Boolean、Symbol(ES6)
String 字符串
- 字符串类型
String:使用单/双引号包起来的一组用于表示文本的字符序列(字母、数字、符号等任意字符);
`just do it`
"bumphy"
'better'
- 注意
(1)两个字符串之间的+,是拼接的作用;
(2)字符串转换:数字字符串在算术运算中,会被当做数字类型使用。
- 技巧:
(1)将数字字符串转换为数字,只需将该字符串与1相乘即可。(还可以使用parseInt函数)
(2)其他类型转换为字符串,只需将其与空字符串连接;如var n = 1;n = “” + n;=>”1”;
Number 数字类型
数字类型
Number:包括整数和浮点数(小数),以64位浮点数形式存储(相当于C语言中的Double)Number类型有三个特殊值:
① NaN是数字类型下的一个特殊值,代表不是数字的结果;
NaN = NaN; // false; NaN与任何数据类型运算,结果都是NaN;
typeof NaN // number 仍然属于数字,只不过是一种特殊的数字
"string" * 2; // NaN 字符串与数字相乘,结果为NaN;
NaN具有传染性,算术运算中存在一个NaN,整个运算的结果就会变成NaN;
② Infinity,代表无限大;
var a = -2/0; var a = Infinity - Infinity;
alert(a); alert(a);
//-Infinity; //NaN
③ -Infinity,代表无限小
typeof infinity; // number
任何数除0也是infinity;最大数表示用infinity,最小数-infinity;
infinity - infinity,-infinity + infinity,结果都是NaN;
infinity与其他任何操作数执行任何算术运算的结果,都是infinity;
- JS支持的最值:
(1)JS中支持的最大值:
var a = Number.MAX_VALUE; a = a + 1.12e307;
alert(a); alert( a);
//1.7976931348623157e+308; //Infinity
(2)JS中支持的最小值:
var res = Number.MIN_VALUE;
alert(res); //5e-324
拓展:指数表示法
一个数字可以表示成le1(或者le+1、1E1、1E+1)这样的指数形式。
即1后面加1个0,就是10;2e+3是2后面加3个0,就是2000;
同理,2e-3就是将数字2的小数点左移三位,结果0.002;
Boolean 布尔类型
- 布尔类型
Boolean:true、false;
ture、false;它们可用于引号以外的任何地方;在括号内引用,就是一个字符串;
Symbol
- Symbol是ES6新增的数据类型;用于解决命名冲突;另行章节
(二)特殊数据类型:null、undefined
Undefined
Undefined未定义:未初始化变量的默认值,即undefined,含义是没有赋值;
js中,访问不存在的值或未经赋值的变量时,得到undefined值。
Null
Null——空值:类型是Object(对象)
(1)null不能通过js来自动赋值,只能通过代码来完成。
var s = null;
s;//null;
typeof s;//"object"
- 两者转换类型时的差别:
(1)转换成数字时,undefined=>NaN;null=>0;
(2)转换成布尔值,!!undefined和!!null都是false;
(3)转换成字符串,”” + undefined;=>”undefined”;”” + null;=>”null”;
(三)复杂数据类型:reference Types
- 对象类型(引用类型/复杂类型)
(1)含义
ECMAScript中的对象,就是一个无序的属性列表,而属性是由一个名称(常常是字符串)和一个值组成的;
换句话说,对象其实就是一组数据(属性)和功能(方法)的集合。
当属性的值是一个函数(function)时,这个属性被称为方法(method);换句话说,方法是一种比较特殊的属性;
在JavaScript中,函数其实是引用值(reference value),一个包含一个数组的属性和一个包含一个函数的属性没什么区别。
(2)创建对象的方式:①使用关键字new、②对象字面量的方式;
(3)对象成员的访问方式:
① 以成员的方式,使用点(.)操作符:obj.name = name;
② 以hash map的方式,使用方括号[]操作符:obj[“name”]=name;
③ 以字符串拼接的方式:obj[“n”+”a”+”m”+”e”]=name
- 引用类型的种类
(1)内置引用类型
| 内置类型 | 描述 |
|---|---|
| Array | 一个数字索引值的有序列表 |
| Date | 一个日期和时间 |
| Error | 一个运行错误(还有一些更具体的错误亚型) |
| Function | 一个函数 |
| Object | 一个通用对象(generic object) |
| RegExp | 一个正则表达式 |
(2)Null类型:有且只有一种取值,即null;(变量保存对象,最好初始化成null,也可以用于清空对象)
(3)对象字面量,是一种动态值;如 var obj = {};//一个空字面量值
二、数据类型转换
(一)显式转换/强制转换
- 显式转换: 在代码上明显地给予转换
| 转换 | 方法 | 描述 |
|---|---|---|
| 字符串转数字 | parseInt | 将参数值转化为整数值;从前向后扫描字符串,直到第一个不是整数的字符为止,将数字部分转化为整数;若第一个字符不是整数,结果为NaN |
| parseFloat | 将参数值转化为浮点数;从前向后扫描字符串,直到第一个不是小数的字符为止;将小数部分转化为小数;若第一个字符不是小数,结果为NaN | |
| Number() | 显式地将参数转换为数字类型并返回 | |
| 字符串转布尔 | Boolean() | 如果不是空字符串, 结果为true;如果字符串为空串的话, 结果为false |
| 数字转字符串 | String() | 数字类型中有几个特殊值: NaN, Infinity 在向字符串转换的时候也直接按字面转 |
| 数字转布尔 | Boolean() | 如果数字是0或者是特殊值NaN,那么结果为false;如果数字非0,且不是NaN,那么结果为true |
| 布尔转字符串 | String() | 如果值为true, 转换结果为字符串 “true”;如果值为false, 转换结果为字符串 “false” |
| 布尔转数字 | Number() | 如果值为true, 转换结果为1;如果值为false, 转换结果为0 |
| Undefined | 转其他类型 | 1.String(undefined);//”undefined” 2.Number(undefined);//NaN 3.Boolean(undefined);//false |
| 对象类型转基本类型 | 关于null | 1.String(null);//”null” 2.Number(null);//0 3.Boolean(null);//false 4.对象类型转布尔类型,null结果为false,非null结果为true |
- 转换符
| 转换符 | 含义 | 实例 |
|---|---|---|
| isNaN() | 判断括号中的表达式的值是否是NaN,如果是NaN,则返回true,否则返回false | console.log(isNaN(“3”+undefined));//true |
| parseInt() | 将字符串强制转换成整数(必须以有效数字开头才会转成数字,否则转成NaN) | console.log(parseInt(“23.45abc”)); |
| console.log(parseInt(“abc123”)); | ||
| parseFloat() | 将字符串强制转换成小数(必须以有效数字开头才会转成小数,否则转成NaN) | console.log(parseFloat(“34.45.56.abc”)); |
| console.log(parseFloat(“sa33”)); | ||
| Number() | 将字符串强制转换成数字(整个字符串必须是有效的数字才可以转,否则转成NaN) | console.log(Number(“34.23”));//34.23 |
| console.log(Number(“23 34”));//NaN | ||
| eval() | 将字符串强制转换成表达式并返回表达式的值 | console.log(eval(“3+4”));//7 |
| console.log(eval(“3+undefined”));//NaN |
(二)隐式转换/自动转换(依赖js解析器去做转换)
- 隐式转换时,JS解析器采用默认方案进行转换:
①向数字类型转, 使用的是 Number();②向布尔类型转, 使用的是 Boolean();③向字符串类型转, 使用的是 String();
在使用算术运算符 或 关系运算符时, 如果遇到不能计算的情况,js会先进行隐式转换, 然后再计算或比较;
关系运算中除了 === 和 !== 其他的符合在不能计算时, 都会先进行隐式转换
补充:①空串 + 另一个值,转为字符串string;② + 数字字符,转为number;
三、字面量
(一)原始类型的字面量
- 所有的原始类型都有字面量表示它们的值。
// strings
var name = "Nicholas";
var selection = "a";
// numbers
var count = 25;
var cost = 1.51;
// boolean
var found = true;
// null
var object = null;
// undefined
var flag = undefined;
var ref; // undefined
(二)对象字面量
- 含义:对象字面量是对象类型中的一种通用格式;(JSON方式)
- 组成:由属性(键key/property/attibute)和值(value)组成;
- 举例:var obj ={name:”tom”,age:18,sex:”male”}
- 访问:通过键名访问其中的值;(两种形式 . 操作符和 [] 操作符:obj.key或者obj[“key”]);
- 注意:对象的属性是动态的,可以在任何时候添加和删改;访问一个对象不存在的键(属性),会得到undefined;
(三)Symbol
- Symbol没有字面量形式
原始方法 Primitive Methods
原始数据类型:字符串, 数字,布尔值 都有方法. (null 和 undefined 类型没有方法)
原因:虽然,这些数据类型有方法,但仍然不是对象,JavaScript这样设计,是为了让它们看起来像对象一样,从而提供一致的语言体验,其实,JS内部实现了一种包装对象的机制。
特别是,字符串有大量的方法,方便于实际编程。
var name = "Nicholas";
var lowercaseName = name.toLowerCase(); // 转换成小写
var firstLetter = name.charAt(0); // 获取第一个字符
var middleOfName = name.substring(2, 5); // 获取2~4之间的字符
var count = 10;
var fixedCount = count.toFixed(2); // convert to "10.00"
var hexCount = count.toString(16); // convert to "a"
var flag = true;
var stringFlag = flag.toString(); // convert to "true"

本文详细介绍了JavaScript中的七种数据类型,包括基本数据类型、特殊数据类型及复杂数据类型,并探讨了数据类型之间的转换方法。
343

被折叠的 条评论
为什么被折叠?



