JS 数据类型
String
var str = 'string'/"string"/`string`
- 字符串由一对单引号或者双引号包裹字符,用重音符也可以。默认字符串是一行的,分行会出错。
- 字符串中的每个字符合起来是一个整体。
- 字符串也有类似数组的下标,但是无法通过下标修改对应值
var s = 'hello'; delete s[0]; s // "hello" s[1] = 'a'; s // "hello" s[5] = '!'; s // "hello"
- 字符串的length属性表示字符串的长度,同样也是不可修改的
var s = 'hello'; s.length // 5 s.length = 3; s.length // 5 s.length = 7; s.length // 5
Number(64位浮点数)
写法
- 整数写法:1
- 小数写法:0.1
- 科学计数法:1.23e4
- 八进制写法(用得少):0123或者00123或者0o123
- 十六进制写法:0b11或者0B11
特殊值
- 正0和负0:都为0,要严谨
- 无穷大:Infinity、+Infinity、-Infinity
- 无法表示的数字(一个无法确定的数字):NaN(not a number)但他的确是数字,
Boolean
布尔值代表“真”和“假”两个状态。“真”用关键字true
表示,“假”用关键字false
表示。布尔值只有这两个值。
下列运算符会返回布尔值:
- 前置逻辑运算符:
!
(Not) - 相等运算符:
===
,!==
,==
,!=
- 比较运算符:
>
,>=
,<
,<=
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false
,其他值都视为true
。
undefined
null
false
0
NaN
""
或''
(空字符串)
Symbol
ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入
Symbol
的原因。ES6 引入了一种新的原始数据类型
Symbol
,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined
、null
、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。Symbol 值通过
Symbol
函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
Undefined
undefined
表示“未定义”,下面是返回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
undefined和null太过接近,设计者
Null
1995年 JavaScript 诞生时,最初像 Java 一样,只设置了
null
表示"无"。根据 C 语言的传统,null
可以自动转为0
。
Number(null) // 0 5 + null // 5
上面代码中,
null
转为数字时,自动变成0。但是,JavaScript 的设计者 Brendan Eich,觉得这样做还不够。首先,第一版的 JavaScript 里面,
null
就像在 Java 里一样,被当成一个对象,Brendan Eich 觉得表示“无”的值最好不是对象。其次,那时的 JavaScript 不包括错误处理机制,Brendan Eich 觉得,如果null
自动转为0,很不容易发现错误。因此,他又设计了一个
undefined
。区别是这样的:null
是一个表示“空”的对象,转为数值时为0
;undefined
是一个表示"此处无定义"的原始值,转为数值时为NaN
。
null
表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null
,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null
,表示未发生错误。
Object
var obj = {'name':'Object'}
- 对象的key一定是字符串
- 读取属性: obj.name或者obj['name'](['里面写表达式或者变量'])
- 属性赋值: obj.name = "hello"或者 obj['name']="hello"
- 属性查看: Object.keys(obj)
- 属性删除: delete obj.name
- 属性是否存在: in 运算符但同时也会返回继承的值,
obj.hasOwnProperty('toString')只能确定自身拥有的值
- 属性遍历: for...in循环