JavaStript里面的数据类型
一,数据类型都有哪些
Number,String,Boolean,Object,Undefined,Null,symbol(ES6);
以上七类,全了。typeof运算符返回的类型会有其他的结果,但是记住了就上面七类,就上面七类,就上面七类。另外像Function和Array,他们都属于Object的子分类,并不是单独的一个数据类型,他们都属于上面七种里面的Object类型;
Object为复杂数据类型,其他为基本数据类型。
二,如何查看一个值的数据类型
typeof运算符,返回一个字符串,该字符串会告诉你数据的类型。
typeof 1;>>>>number
typeof '1';>>>>string
typeof true;>>>>boolean
typeof undefined;>>>>undefine
typeof symbol('a');>>>>symbol
typeof {};>>>>object
typeof [];>>>>boject
typeof null;>>>>object
typeof function(){};>>>>function
三,数据类型详解
1,Number
Number,数字or数值。凡是数值,它的数据类型就是Number。另外有一个叫做‘不是数’的值比较特殊,它也属于Number,就是NaN。
①,10;可以是整数。
②,10.1 / .1;可以是小数(如果小于1,可省略0)。
③,0b11;二进制的数。(0b开头)
④,0x11;十六进制的数。(0x开头)
⑤,077 / 0o77;八进制的数。(0开头,后面出现的数字小于8 / 0o开头)
ps:以上3~6三种数值,必须符合相对应进制的书写方法,比如0b33,0b开头表示二进制,但他并不是二进制,33是什么鬼?会报错的。
⑥,+0 / -0;(它们都是零)。
⑦,Infinity / -Infinity;(正无穷与负无穷)。
ps:JS里面,数值是有范围的,范围为2的1024次方到2的-1075次方之间(不包含),超出前者用Infinity表示,超出后者则为0;
⑧,102e3 / 102e-3;指数;(小数点前的数字多于21位,小数点后的零多于5个,JS会自动把数值转化成指数)。
⑨,NaN;(最特殊的一个,其含义为‘不是一个数’,但它是Number,主要出现在将字符串解析成数字出错或运算出错的场合)。
2,String
String,字符串,一般用''或者""包裹起来的字符就是字符串。
①,如果字符串中存在'或者",需要用\转义,也可以双引包单引或单引包双引。
②,写代码时,如果你非要把字符串换行来写,可以,\回车或者用+运算符连接上下行字符串。
ps:用\转义要紧跟回车换行,\后不可有空格,因为\转义的就不是回车而是空格了。但是实际输出的还是一行字符串。在ES6中用``包裹字符串完美换行,无需任何操作。
③,反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
需要用反斜杠转义的特殊字符,主要有下面这些。
\0 :null(\u0000)
\b :后退键(\u0008)
\f :换页符(\u000C)
\n :换行符(\u000A)
\r :回车键(\u000D)
\t :制表符(\u0009)
\v :垂直制表符(\u000B)
\' :单引号(\u0027)
\" :双引号(\u0022)
\\ :反斜杠(\u005C)
④,转义符\可转义表示八进制,十六进制的字符串,可转义为对应编号的 Unicode 码点,会输出对应字符。
(1)\HHH
反斜杠后面紧跟三个八进制数(000到377),代表一个字符。HHH对应该字符的 Unicode 码点。
(2)\xHH
\x后面紧跟两个十六进制数(00到FF),代表一个字符。HH对应该字符的 Unicode 码点。
(3)\uXXXX
\u后面紧跟四个十六进制数(0000到FFFF),代表一个字符。XXXX对应该字符的 Unicode 码点。
PS:可用于变量名中,当然必须符合标识符命名规则,比如 var foo 写成 var f\u006F\u006F。
④,关于Base64方法:
全局函数 btoa() 能将字符串转为Base64编码
全局函数 atob() 能将 Base64编码转为原来的编码
要将非ASCII码字符转为Base64编码,必须中间插入一个转码环节
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。
3,Boolean
Boolean,布尔值,一共两个值true,false。
①&&运算符;(全真则真,返回true,有假则假,返回false)。
②丨丨运算符;(全假则假,返回false,有真则真,返回true)。
4.Undefined 和 Null
undefined 和 null都表示没有值,至于 JS 为什么有两个都表示没有值,是因为这是设计之初的不合理造成的历史遗留问题。
①,如果一个变量没有被赋值,那么这个变量的值就是 undefiend,意思是未定义,例如 var a。
②,null,如果var a = null;就代表a的值为空,没有值,是个空的。
③,如果你想表示一个还没赋值的对象,就用 null。如果你想表示一个还没赋值的字符串/数字/布尔/symbol,就用 undefined(但是实际上你直接 var a 一下就行了,不用写 var a = undefined)。
ps:第一版的 JavaScript 里面,null就像在 Java 里一样,被当成一个对象,Brendan Eich 觉得表示“无”的值最好不是对象。其次,那时的 JavaScript 不包括错误处理机制,Brendan Eich 觉得,如果null自动转为0,很不容易发现错误。
因此,他又设计了一个undefined。区别是这样的:null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。
5,Object
Object,对象。由{}包裹零个或多个键值对儿表示。它是复合类型的值,可以包含以上所有值。
例如:
var object = {
a=1;
b='1';
c=null;
d=true;
......
}
①,array和function是它的子分类。
②,键名是字符串,当然你可以不加引号,前提必须符合标识符命名规则。可以object.key来引用,也可object['key']来表示(key为出数字则免引号)。
③,键名加上引号就可以超出标识符命名规则。如超出规则,必须object['key']来表示(key为出数字则免引号)。
④,键名为空字符串'',是合法的。
⑤,delete命令可删除对象的属性。
ps:删除自身属性,返回true且成功删除;删除继承属性,返回true但是失败;删除不存在的属性,也返回true;只有删除不可删除属性,返回false;
⑥,for...in..遍历对象。包括继承属性,但会跳过不可遍历属性,其遍历的属性的顺序是随机的。
⑦,查看一个对象本身的所有属性,可以使用Object.keys方法。
6,Symbol
Symbol类型,symbol方法生成一个symbol类型的值,它是全局唯一的值。唯一的值。
①,这样使用,symbol('xxx')。
ps:Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。
②,比较一下,symbol('1') !== symbol('1'); //true。
③,Symbol 值不能与其他类型的值进行运算,会报错。
④,另外,Symbol 值也可以转为布尔值(true),但是不能转为数值。
⑤,Symbol 值可以显式转为字符串。
⑥,由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。
⑦,详见http://es6.ruanyifeng.com/#docs/symbol
--------------------------------------------------------------------------------------------------------------------------------
引用:
阮一峰的JS基础教程
阮一峰的ES6入门