殴打小盆友之JS系列(一):JS数据类型

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

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
对象类型转基本类型关于null1.String(null);//”null” 2.Number(null);//0 3.Boolean(null);//false 4.对象类型转布尔类型,null结果为false,非null结果为true

- 转换符

转换符含义实例
isNaN()判断括号中的表达式的值是否是NaN,如果是NaN,则返回true,否则返回falseconsole.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"
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值