1、JavaScript 的数据类型,共有七种。
数值(number)
字符串(string)
布尔值(boolean)
undefined
null
对象(object)
符号(symbol)ES6新增
通常,数值、字符串、布尔值这三种类型,合称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。
对象则称为合成类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。
至于undefined和null,一般将它们看成两个特殊值。
① 数字(number)
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。
十进制:没有前导0的数值。(整数和小数)
八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。(011)
十六进制:有前缀0x或0X的数值。(0x11)
二进制:有前缀0b或0B的数值。(0b11)
科学计数法:(1.23e2)
JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
② 字符串(string)
字符串就是零个或多个排在一起的字符,放在单引号''或双引号""之中。
字符串默认只能写在一行内,分成多行将会报错。
如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠或使用'+'或者反引号"`"
var s='12345\
67890' //'1234567890'
//或者
var s1='12345'+
'67890' //1234567890
//或者
var s2=`12345
67890` //1234567890
反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
需要用反斜杠转义的特殊字符,主要有下面这些。
\0 :null
\b :后退键
\f :换页符
\n :换行符
\r :回车键
\t :制表符
\v :垂直制表符)
\' :单引号
\" :双引号
\\ :反斜杠
③ 布尔值(boolean)
表示真伪的两个值,即true(真)和false(假)
a && b 在 a 和 b 都为 true 时,取值为 true;否则为 false
a || b 在 a 和 b 都为 false 时,取值为 false;否则为 true
④ undefined null
null与undefined都可以表示“没有”,含义非常相似。
null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。
undefined表示“未定义”
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
⑤ 对象(object)
对象是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
var a = {
name:'frank',
age:18,
children:'null'
}
key必须为字符串形式,引号可以省略。但是根据标识符规则:1.首字母不能使数字、2.中间不能有空格、3.后边必须是合法字符。
{9a:'wang'}//错误形式
{'9a':'wang'}//正确形式
调用时,有两种方法:点方法和方括号法。
a['name']//正确
当key的命名符合标识符规则时,可以改写为点方法。
a.name//正确,特例
可以对对象中的key进行删除。
delete a['name']
a.name //undefinedd (无value)
'name' in a //false (无key)
当使用:
a['name']=undefined
'name' in a //true
此时,只是更改'name'属性的value值为undefined,所以所以key还在。
遍历对象(for....in...)
for (var key in a) //此时打印出key的值
如果需要打印出value的值
console.log(a[key])//正确方法
//错误方法示范
console.log(a.key)
//此时a.key===a['key'],
//而a中没有'key'这个属性
2、typeof 运算符
typeof运算符可以返回一个值的数据类型。
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
function f() {}
typeof f // "function"
typeof undefined // "undefined"
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
typeof /([a-z])/ //"object"