JavaScript中的数据类型及数据间的相互转换
- js中的数据类型主要分为两大类
- 基本数据类型
- 数字 Number
常规数字和NaN - 字符串 String
所有拥单引号、双引号、反引号抱起来的都是字符串 - 布尔 Boolean
true/false - 空对象指针 null
- 未定义 undefined
- 数字 Number
- 引用数据类型
- 对象数据类型 Object
- {} 普通对象
- [] 数组对象
- /1?(\d|(-19))(.|)?$/ 正则对象
- Math 数学函数对象
- 日期对象
- …
- 函数数据类型 function
- 对象数据类型 Object
- 基本数据类型
number 数字类型
包含:常规数字、NaN
NaN
not a number:不是一个数,但是隶属于数字类型
判断一个值是否是number类型,不能用判断该值是否==NaN,因为NaN和任何一个值都不相等,包括她自己,及NaN != NaN
isNaN
检测一个值是否为有效数字,如果不是则返回true,反之返回flase
- 语法
// isNaN[value] console.log(isNaN(10)) // false console.log(isNaN('a')) // true // Number('a') => NaN // isNaN(NaN) => true console.log(isNaN('10')) // false // Number('10') => 10 // isNaN(10) => false /* 解释:在使用isNaN进行检测的时候,首先会验证被检测的是否为数字类型, * 如果不是,先基于Number()方法,把值转换成数字类型,再进行检测 */
把其他类型值转换为数字类型
- Number(value)
把字符串转换成数字类型:只要字符串中包含任意一个非有效数字字符(第一个点除外)结果都是NaN;特别的,空字符串会转换成数字0
console.log(Number('12.5')) // => 12.5 console.log(Number('12.5px')) // => NaN console.log(Number('')) // => 0
- 把布尔转换为数字类型
console.log(Number(true)) // => 1 console.log(Number(false)) // => 0
- null 和 undefined
console.log(Number(null)) // => 0 console.log(Number(undefined)) // => NaN
- 把引用数据类型转换为数字类型
把引用数据类型转换为数字,是先把该值基于toString()方法转为字符串,然后再转换为数字
console.log(Numer({})) // => NaN // {}.toString() => "[onject object]" // Number("[object object]") => NaN console.log(Number([])) // => 0 // [].toString() => "" // Number("") => 0 console.log(Number([12])) // => 12 // [12].toString() => "12" // Number("12") => 12 console.log(Number([12,13])) // => NaN // [12,13].toString() => "12,13" // Number("12,13") => NaN
string 字符串数据类型
所有拥单引号、双引号、反引号包起来的都是字符串
把其他类型值转换成字符串
- [val].toString()
- 字符串拼接(加法运算可能存在字符串拼接)
基本数据类型转为字符串
除了null和undefined不能直接使用toStrng()方法,其他类型都可以通过toString()转成字符串,并转换后的结果只是多了引号,其他不变
null和undefined转为字符串也是一样的变成’null’和’undefined’,只是它们不能直接通过toString()来实现
console.log((true).toString()) // => "true"
let a = 13;
console.log(a.toString()) // => "13"
console.log((NaN).toString()) // => "NaN"
引用型数据类型转为字符串
数组对象、正则对象、函数对象等通过toString()方法转为字符串,跟基本数据类型转为字符串一样,就是多了双引号,内容不变;普通对象{}通过toString()转为字符串,统统都是"[object object]"
console.log(([12,13]).toString()) // => "12,13"
function a() {
let a = 0;
}
console.log(a.toString()) // => "function a() {
let a = 0;
}"
let res = /^(1-9)/
console.log(res.toString()); // => "/^(1-9)/"
console.log(({}).toString()) // => "[object object]"
额外的题目
let str = 10 + null + true + [12] + undefined + '字符串' + null + [] + 10 + false;
console.log(str)
boolean布尔数据类型
只有两个值 true/false
把其他类型的值转为布尔类型
只有0、NaN、’’、null、undefined这五个值会转为false,其余的全部转为true,并且没有任何特殊情况
Boolean()
console.log(Boolean(0)) // => false
console.log(Boolean(NaN)) // => false
console.log(Boolean('')) // => false
console.log(Boolean(' ')) // => true
console.log(Boolean(null)) // => false
console.log(Boolean(undefined)) // => false
console.log(Boolean([])) // => true
console.log(Boolean([12])) // => true
console.log(Boolean({})) // => true
!:取反(先转为布尔,然后取反)
console.log(!1) // => false
!!:取反再取反,只相当于转为布尔,等价于Boolean()
console.log(!!1) // true 相当于Boolean(1)
null / undefined
null和undefined都代表的是没有
- null:意料之中(一般都是开始不知道值,手动设置为null,后期再给予赋值操作)
let num = null;
num = 13;
- undefined:意料之外(不是人为能决定,掌控的)
let num; // => 创建了一个变量但是没有赋值,默认值是undefined
object对象类型-普通对象
{[key]: [value], …} 任何一个对象都是由零到多组属性名不重复的键值对组成(属性名:属性值)
想要获取对象的属性值,一般通过 obj.key 或者 obj[key]来访问对象的某个属性值,特别的,当对象的属性为数字时,不能再通过.的方式获取属性值,只能通过 obj[key];
给对象添加属性和属性值:obj.key = value 或者 obj[key] = value
let obj = {
name: '兰兰',
age: 23,
height: '160cm',
12: '测试'
}
console.log(obj.name) // => '兰兰'
console.log(obj[age]) // => 23
console.log(obj.sex) // => undefined
console.log(obj[12]) // => '测试'
console.log(obj.12) // SyntaxError: 语法错误
± ↩︎