Js六种数据类型
引言
Javascript有六种数据类型,其中五种简单数据类型时Undefined,Boolean,Number,Null,String,最后一种是Object,它是复杂数据类型
typeof方法可以用来判断数据类型
返回值(字符串)有:
“undefinded”
“boolean”
“number”
“string”
“function”
"“object”(当该变量为null(null被认为是空的对象引用)或者是对象时都是返回object)
Undefined
含义:当一个变量在未被 初始化之前它就是undefined
值:undefined
同时我们一般不会显式的初始化一个变量为undefined,因为这是不必要的,未被初始化它的值就是undefined。同时如果用typeof去检测一个一个未声明的变量(如果使用其它操作则会保错)和一个未被初始化的变量,它的结果都将是undefined,这种结果在逻辑上有其正确性,因为一个是变量未声明,另一个是值未定义,都可以说是undefined。
console.log(s);
/*报错Uncaught ReferenceError: s is not defined
at <anonymous>:1:7
*/
var s;
console.log(s);//undefined
typeof s;//"undefined"
Null
含义:表示一个空对象指针,这也是typeof 对它使用时会返回"object"的原因
值:null
var s=null;
typeof s;//"object"
console.log(null==undefined);//true(由于undefined的值其实是派生自null的所以ECMA-262规定它们是相等的),同时==操作符处于比较目的会转换它们的类型
Boolean
含义:布尔值,表示逻辑上的真假
值:true false(它是区分大小写的,也就是说True和False…都不是布尔值)
所有的值都可以通过Boolean()来转换为对应的Boolean值
数据类型 | 转换为true(小写)的值 | 转换为false(小写)的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | 空字符串("") |
Number | 任何非零的数字(包括无穷大) | 0和NaN(not a number) |
Object | 非空对象 | null |
Undefined | 无 | undefined |
var s="";
Boolean(s);//false 空字符串
s=" ";
Boolean(s);//true 即使只是一个空格也已经不再是空字符串了
s=0;
Boolean(s);//false
s=NaN;
Boolean(s);//false NaN(not a number)表示非数字
Number
含义:数字类型(有整数和浮点数和NaN)
整数
除了常用的十进制,我们还常常使用八进制和十六进制,八进制以0开头来表示,十六进制以0x开头来表示,在进行算术运算时,最终结果会转换为对应十进制
var s=070;//八进制的56
s=078;//十进制的78,因为0后面有一位8,所以被解析为十进制而不是八进制
s=0xA;//十六进制的10,十六进制9后面的用abcdef(大小写皆可)来表示10-15
s=070+0XA;//66(56+10)
浮点数
浮点数表示该数值必须带有小数点,并且小数点后必须有至少一位数字
由于保存浮点数所需要的空间是整数的两倍,所以ECMAScript会不失时机的将浮点数转换为整数,比如小数点后没有数字,或者是小数点后是0…
浮点数所能表示的最大的数保存在Number.MAX_VALUE中,是1.7976931348623157e+308,最小的数保存在Number.MIN_VALUE,是5e-324,且如果超过了最大值将会转换为Infinity,超过了最小值为-Infinity,这两个数值无法参与计算,我们可以使用isFinite来判断一个数值是否是有穷的(位于最大值和最小值之间返回true),超出了返回false
var s=1.1;//浮点数
s=Number.MAX_VALUE+Number.MAX_VALUE;
isFinite(s);//false
NaN
用来表示一个本来要返回数值的操作数未返回数值的操作数未返回数值的情况,比如一个数值除以一个非数值就会返回NaN
特点:任何涉及NaN的操作将会返回NaN,NaN和任何数值都不相等(包括它自己)
可以用isNaN()来判断一个变量是不是数值,它首先会尝试将接收到的参数转换为数值再来判断
var s=5/你好;
console.log(s);//NaN
console.log(isNaN(s));//true
console.log(NaN+1);//NaN
console.log(NaN==NaN);//false
数值转换
Number();
Boolean: true->1 false->0
Null:null->0
Undefined: undefined->0
String:
如果字符串的内容只包含数字,则将其转换为十进制数值
如果包含有效浮点格式,则转换为对应浮点数
如果包含有效的十六进制格式,将转换为对应十进制数值
空字符串转换为0
上述之外的转换为NaN
ParseInt():
它会首先从字符串开头开始寻找,忽略空格,直到找到第一个非空格字符,如果不是数字直接返回NaN,同时它对空字符串使用会返回NaN,如果是数字的话,它会继续向后知道碰到非数字或结束,将这一段数字字符返回,因此如果是"22.5"会返回22,因为点不是数字。
同时它还会识别八进制和十六进制的格式,并将其转换为十进制,并且我们还可以给定第二个参数来决定转换时使用多少进制。
ParseFloat()
和parseInt()类似,但是它会识别字符串里的小数点,其次它始终都会忽略前导0(即它只解析十进制)
String
表示字符串,单引号,双引号都可以用来表示字符串
特点:不可变的,一旦创建不可改变,要改变就要销毁原来的字符串,再用新字符串填充
转义序列
字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸(针对打印机的命令) |
\\ | 斜杠 |
\’ | 单引号 |
\" | 双引号 |
\xnn | 以十六进制代码nn表示的一个字符 |
\unnnn | 以十六进制代码nnnn表示的一个Unicode字符 |
console.log("\\");// \
console.log("\'");// '
var text="This is the letter sigma:\u03a3";//This is the letter sigma:Σ(这是以十六进制代码来表示一个字符)
console.log(text.length);//26 我们还可以通过length,来获得字符串的长度
转换为字符串
toString()
数值 布尔值 对象 和字符串值(返回自己的一个副本)都有一个toString()方法,null和undefined没有。
同时可以传递一个参数来将数值转换为对应参数进制
var num=10;
num.toString(2);//"1010"
num.toString(8);//"12"
num.toString(16);//"a"
String()
如果不知道我们传递的值是不是null或者undefined时我们可以使用String()方法,它可以将任何类型转换为字符串
如果传递的值有toString方法则调用
如果是undefined则返回字符串"undefined"
如果是null则返回字符串"null"
Object
对象其实就是一组数据和功能的集合,对象可以通过执行new操作符后跟要创建的对象类型的名称来创建(简单叙述)
常用方法
constructor:保存着用于创建当前对象的函数
hasOwnproperty:用于检查给定的属性是否在当前对象实例中是否存在(而不是在原型中)。参数必须以字符串给定
isPrototypeOf:用于检查传入的对象是否是当前对象的原型
propertyIsEnumerable:用于检查给定的属性能否用for-in语句来枚举
toString():返回字符串表示
valueOf():返回对象的字符串,数值或布尔值表示