JS 里的数据类型
number // 数值,包括整数及小数
string // 字符串
boolean // 布尔值, true false
undefined // 未定义或不存在
null // 空值
object // 包括对象、数组、函数
symbol
number 数值
整数和小数:1 1.1 .1
科学记数法:1.23e2
二进制:0b11
八进制:011(后来 ES5 添加了 0o11 语法)
十六进制:0x11
转换为number的五种方法:
number('1')===1
parseInt('1',10) ===1// 十进制 ,parse意为解析,需重点留意
parseFloat('1.23')===1.23 //小数,用浮点数,浮点数只有十进制形式,故不用再标注
‘1’-0===1 //任何数据-0 均可得到一个number ,快捷常用
+‘1’===1 // + 表示以数字形式取原本的值,+ ‘-1’=== -1
string 字符串
var a='\''
var a='\n' // 回车
var a='\t' // 制表符Tab
var a='\\' // 符号\
//以上字符长度均为1
用反斜杠 \ 来表明此符号不是结束符号
需注意:‘’表示空字符串;‘ ’表示空格字符串
ES6 新加了语法,用反引号` 可以解析反引号内所有内容,多行字符串直接回车即可
var s=`123
456`
// s.length是7,因为包含了回车
var q=`123
456`
// q.length是8,因为包含了回车和一个空格
转为字符串的三种方法:
.toString
+'' //加上空字符串,若左右有一边是字符串,加号会尝试把左右两边数据转为字符串
window.String() //全局函数
boolean 布尔值
只有两个值:true false
a && b 在 a 和 b 都为 true 时,取值为 true;否则为 false
a || b 在 a 和 b 都为 false 时,取值为 false;否则为 true
转为布尔的两种方法
Boolear()
!! // 取反再取反 快捷常用
Boolear(1)//true
!!1 //true
除了下面六个值被转为false,其他值都视为true。
undefined
null
false
0
NaN
""或''(空字符串,引号中间无空格。需要与空格字符串区别开,前者长度为0,后者长度为1)
注意,空数组([])和空对象({})对应的布尔值,都是true。
undefined 与 null 的区别
规范:如果一个变量没有被赋值,那么这个变量的值就是 undefiend
习俗:
有一个对象object,暂不赋值,可初始设置为null
有一个非对象,暂不赋值,可初始设置为undefined
object 对象
对象是最复杂的数据类型,又可以分成三个子类型:
狭义的对象(object)
数组(array)
函数(function)
(狭义的对象和数组是两种不同的数据组合方式)
object 就是其他几种基本类型(无序地)组合在一起
object 里面可以有 object
object 的 key 一律是字符串,不存在其他类型的 key
object[''] 是合法的
object['key'] 可以写作 object.key
(注意 object.key 与 object[key] 不同)
下面代码,用 delete 将 key 和 value 都清空了。
若直接将person.name=undefined,则key还保留着,只是value被更改。
delete person['name'] // 或者 delete person.name
person.name // undefined 无value
'name' in person //false 无key
用 for ...in 遍历 对象的属性(无序)
var person={name:'wy',gerder:'female'}
for(var key in person){
console.log(key)
console.log(person[key])//此处不能用person.key
}
typeof
使用 typeof 来查看数据类型
typeof 123 // “number”
typeof '123' // "string"
typeof false // "boolean"
function f(){}
typeof f()
// "function"
typeof undefined // "undefined"
一个变量a,若无声明而直接使用会报错,但若用typeof来检查,则不报错。
可利用此特性
if(typeof a==="undefined"){} // 由于之前a未声明,此处若不加typeof 则会报错
空数组[ ] 的类型也是object ,可见,js中,数组本质也是一种特殊对象
不过,用 instanceof 运算符可以区分数组和对象
typeof {} //"object"
typeof [] //"object"
var a={};
var b=[];
a instanceof Array //false
b instanceof Array // true
有两个特殊情况要注意,JS的历史遗留问题:
typeof null //"object"
typeof function(){} //"function"
实际上,null的类型应该为null,function的类型应该为对象(object)
(对象类型包括:狭义的对象、数组、函数)