2.1 两种数据类型概念
-
基础类型
- 原始类型(基础类型)数据保存在栈内存里
- 包括:Number、String、Boolean、Undefined、Null、Symbol
-
复杂类型
-
复杂类型(引用类型)数据保存在堆内存里,通常内存占据空间较大,存放的是地址。
-
包括:对象
{}
,数组[]
、函数(){}
-
2.2 基础类型数据-Number
-
声明定义
js// 字面量声明 var num = 1; console.log(typeof num) // number // 数字对象方式声明 var num = new Number(2); console.log(num + 3) // 5
-
数字方法
-
整数判断
jsconsole.log(Number.isInteger(1.3)) // false
-
指定返回的小数位数
jsconsole.log((12.345).toFixed(2)) // 12.35
-
-
NaN - 表示非数字值
jsvar a = '123'; console.log(Number(a)); // 123 console.log(isNaN(a)); // false var b = 'asdf' console.log(Number(b)); // NaN console.log(isNaN(b)) // true
注意 :
null
,""
两个值会被判断为数字,所以使用前应该屏蔽jsvar a = ''; console.log(Number(a)); // 0 console.log(isNaN(a)); // false var b = null console.log(Number(b)); // 0 console.log(isNaN(b)) // false
-
浮点精度
-
js语言在浮点数计算时会有精度误差问题
jsvar a = 0.1 + 0.2 console.log(a) // 0.30000000000000004
-
解决方式
jsvar a = 0.1 + 0.2 console.log(a.toFixed(1)) // 0.3
-
2.3 基础类型数据 - String
-
声明定义
js// 字面量声明 var name = '小帅' // 可以使用单引号或者双引号 // 字符串对象方式声明 var name = new String('小帅')
-
(常用)字符串方法
js// 连接运算符 var address = 'csdn.net' name = 'CSDN' console.log(name + '网址为' + address) // CSDN网址为csdn.net // 获取长度 console.log('csdn.net'.length) // 8 // 大小写长度 console.log('csdn.net'.toUpperCase()) // CSDN.NET console.log('CSDN.NET'.toLowerCase()) // csdn.net // 移除空白 var str = ' csdn.net ' console.log(str.length) // 14 console.log(str.trim().length) // 获取单字符 console.log('csdn.net'.charAt(3)) // n console.log('csdn,net'[3]) // n // 截取字符串 var n = 'csdn.net'.slice(1, 5) // 左闭右开 console.log(n) // sdn. // 查找字符串 console.log('csdn.nets'.indexOf('s')) // 1 console.log('csdn.nets'.indexOf('s', 6)) // 8 从第六个字符开始搜索 // 替换字符串 var name = 'CSDN教育机构' var changeName = name.replace('机构', '课堂') console.log(changeName) // CSDN教育课堂 // 类型转换(将'2022-01-22'时间格式转换为'2022/01/22') var time = '2022-01-22' console.log(name.split('-')) // ['2022', '01', '22'] var a = name.split('-') console.log(a.join('/')) // 2022/01/22
2.4 基础类型数据 - Boolean
-
声明定义
js// 字面量声明 var a = true
-
隐式转换
几乎所有的类型都可以隐式转换为Boolean类型
基础类型 true false String 非空字符串 空字符串 Number 非0的数值 0/NaN Array 数组不参与比较时 参与比较的空数组 Object √ undefined √ null √ NaN √ js// String console.log(Boolean('123')) // true console.log(Boolean('')); // false // Number console.log(Boolean(1)) // true console.log(Boolean(NaN)); // false // Array var list1 = []; var list2 = [1, 2] console.log(Boolean(list1)) // true console.log(Boolean(list2)) // true console.log(list2 == true) // false
当其他类型与Boolean类型对比时,会将其他类型先转换为数值类型再对比
jsconsole.log(Number('123')); // 123 console.log('123' == true); // false console.log('1' == true); // true console.log(Number([])); // 0 console.log([] == true); // false
-
显式转换
jsvar a = '' console.log(!!a) // false a = 0 console.log(!!a) // false a = null console.log(!!a) // false a = 1 console.log(!!a) // true
2.5 基础数据类型 - Undefined、Null、Symbol
-
Undefined/Null
-
Null和Undefined基本是同义的
jsundefined == null // true
null 是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
jsconsole.log(Number(null)) // 0 console.log(Number(undefined)) //NaN console.log(5 + undefined) //NaN
-
Undefined
js// 变量被声明了,但没有赋值时,就等于undefined var i console.log(i) // undefined // 对象没有赋值的属性,该属性的值为undefined var o = new Obeject() console.log(o.p) // undefined // 函数没有返回值时,默认返回undefined function test(){} console.log(test()) // undefined
-
Null
jsnull // 表示"没有对象", 即此处不该有值 用法: (1) 作为函数的参数,表示该函数的参数不是对象 (2) 作为对象原型链的终点 Object.getPrototypeOf(Object.prototype) // null
-
-
Symbol(es6的语法)
-
Symbol('name')生成唯一属性
js// 在一个对象中需要增加一个相同的属性名 var xs = {aa : '1'} var aa = Symbol('aa') xs[aa] = 2 console.log(xs)
-