JS 里的数据类型
七种数据类型
Number,String,Boolean,Null,Undefined,Symbol(ES6加入),Object
- 数值(number):整数和小数(比如1和3.14)。
- 字符串(string):文本(比如Hello World)。
- 布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)。
- undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值。
- null:表示空值,即此处的值为空。
- 对象(object):各种值组成的集合。
基础数据类型
Number 类型
因为 Number 在javascript中是以双精度浮点数的形式存储的,比如
1与1.0是相同的,是同一个数。所以在数值运算的时候需要注意这一点。NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。值得一提的是
NaN === NaN //falseNaN不等于任何值包括它自己。
String 类型
- JavaScript中存在
'hello'"hello"两种字符串引号,但是由于 HTML 语言的属性值使用双引号,所以很多项目约定 JavaScript 语言的字符串只使用单引号,我也选择遵守 - 注意
''""是空字符串' '" "是空格字符串\表示转义字符' ----\''---- '
关于转义
反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
需要用反斜杠转义的特殊字符,主要有下面这些。
-
\0:null(\u0000) -
\b:后退键(\u0008) -
\f:换页符(\u000C) -
\n:换行符(\u000A) -
\r:回车键(\u000D) -
\t:制表符(\u0009) -
\v:垂直制表符(\u000B) -
\':单引号(\u0027) -
\":双引号(\u0022) -
\\:反斜杠(\u005C)
Boolean 类型
布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。
下列运算符会返回布尔值:
- 前置逻辑运算符:
!(Not) - 相等运算符:
===,!==,==,!= - 比较运算符:
>,>=,<,<=
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
- undefined
- null
- false
- 0
- NaN
- "" 或 ''(空字符串)
Null 类型 和 Undefined 类型
关于null 类型 和 undefined 类型可以这样理解,null表示值为空,undefined表示"未定义"
- undefined类型只有一个undefined值,null类型只有一个null值,但是javascript是一个动态类型的语言,如果定义一个变量,但是没有给它赋值 它的值就是undefined
var name;
console.log(name);//undefined
- 如果想销毁一个对象,回收对象的内存,就将null赋给obj,这样没有被指向的对象会被垃圾回收机制回收
var obj = {};
obj = null;//变量obj被强制指向null,没有被引用的对象{}将被垃圾回收机制回收
复杂数据类型
Object 类型
- object 是复杂数据类型,由基础数据类型组成
var obj = {
'name':'angmieee',
age:22,
self:obj //这个属性指向自身 内存
}
- 在访问属性的写法上,
obj.name等同于obj['name'],但是这样的写法有诸多限制,且属性名必须符合标识符的写法 - array和function本质上都是object类型
其他
JavaScript这门语言在设计之初由于历史原因导致它设计得并不好,在语法上会存在很多令学习者费解的地方
- BUG1 是在unicode之后utf-8之前发明之前诞生的,所以对utf-8的支持是不完整的,字符串长度返回值可能不正确,这是历史原因造成的
- BUG2 有两个空值null,undefined这让初学者难以理解(js之父承认这是设计的错误)
- BUG3 typeof null返回 "object" 是个历史错误(js发明者自己这么说的),而在之后的ES更新版本只是为要保持浏览器兼容性没有对它进行修改
- BUG4 typeof function返回的却是 "function" 原因同上