数据范例
1.Undefined
示意变量已声明,但未被初始化。须要注重的是当运用typeof操纵符推断数据范例时,未被声明的变量和未初始化的变量返回的值都为undefined
var message;
console.log(typeof message);//undefined
console.log(typeof age);//undefined
2.null:示意一个空对象指针
运用typeof操纵符返回的值是’object’,须要注重的是,undefined值是派生自null值的,因而ECMA-262划定对它们的相称性测试要返回true。
console.log(null == undefined);//true
3.布尔值:true或false
ECMAScript中一切范例都有与这两个值等价的值,要将一个值转换为其对应的布尔
值,能够挪用转型函数Boolean();
Boolean(NaN);//false
Boolean(0);//false
Boolean('');//false
Boolean(null);//false
Boolean(undefined)//false
4.Number范例
运用IEEE754花样来示意整数和浮点数值。
浮点数值:该数值中必需包括一个小数点,而且小数点背面必需至少有一名数字。浮点数值须要内存空间是保留整数值的两倍。最高精度是17为小数,但在举行算术运算时其精度远远不如整数。
种种数值范例:十进制,八进制(在严厉形式下无效),十六进制
八进制字面量的第一名必需是0,然后是八进制数字序列(0~7)。假如字面值中的数值超越了局限,那末前导0将被疏忽,背面的数值将被当作十进制数来剖析
070//56
079//79
十六进制字面值的前两位必需是0x,后跟十六进制数字(0~9及A~F)。个中字母A~F可大小也可小写
0xA//10
在举行算术盘算时,一切以八进制和十六进制示意的数值终究都将被转换为十进制数值
数值局限:
整数检测
Number.isInteger(42); // ture
Number.isInteger(42.0); // true
Number.isInteger(42.3); // false
特别数字
NaN
console.log(NaN === NaN)//false
0/0//NaN
isNaN
:吸收一个参数,会尝试将这个值转换为数值,返回布尔值。只搜检参数是不是不是NaN,也不是数字。
console.log(isNaN('10'));//false
console.log(isNaN('bb'));//true
无限数
假如某次盘算中的效果中获得了一个超越javascript数值局限的值,那末这个值将被转换为特别的Infinity值,该值没法介入下一次的盘算,由于Infinity是没法介入盘算的数值。假如这个数是正数则被转换为Infinity(正无限),假如这个数是负数则被转换为-Infinity(负无限)。
-10/0//-Infinity
10/0//Infinity
var result = Number.MAX_VALUE + Number.MAX_VALUE
result // Infinity
Infinity/Infinity // NaN
零值
对-0举行字符串化会返回’0′;但反过来将字符串转化为数字效果是正确的。
// 转字符串
var a = 0 / -3;
a.toString() // '0'
a + '' // '0'
String(a); // '0'
// 转数字
+'-0' // -0
Number(-0); // -0
JSON.parse('-0'); -0
0 === -0 // true
// 辨别0和-0
function isNegZero ( n ) {
n = Number(n);
return (n === 0) && (1/n === -Infinity);
}
// ES6加入了Object.is();来推断两个值是不是相对相称
数值转换
有3个函数能够把非数值转换为数值。Number()
:运用于任何数值范例。
null
Number(null)//0
undefined
Number(undefined)//NaN
布尔值
Number(true)//1
Number(false)//0字符串
Number(‘bb’)//NaN,非数值字符
Number(‘123’)//123,数值字符
Number(”)//0,空串对象
假如是对象,则搜检该值是不是有valueOf()
要领,假如有而且返回基本范例值,则运用该值举行强迫范例转化。假如没有,则挪用对象的toString()
要领的获得的返回值举行强迫范例转换。
parseInt()
/parseFloat()
:用于将字符串转换为数值。
parseInt():
从第一个字符串最先剖析,直到剖析到非数字字符,可接受两个参数,第二个参数代表差别的进制,默许转换为十进制数。
parseInt('')//NaN,空串
parseInt(22.4)//22
parseInt('12bu')//12
parseInt('10',2)//2
parseInt('10',8)//8
parseFloat():
从第一个字符串最先剖析,第一个小数点有用,疏忽前导0,只能转换为十进制数值。
parseFloat('')//NaN
parseFloat('090')//90
parseFloat('2.3.4')//2.3
5.String范例
String范例示意由0或多个16位Unicode字符构成的字符序列,即字符串。ECMAScript中的字符串是不可变的,也就是说,字符串一旦建立,它们的值就不能转变。要转变某个变量保留的字符串,首先要烧毁本来的字符串(此历程是在背景发作的),然后再用另一个包括新值的字符串添补该变量
字符字面量/转义序列
\n
换行\t
制表\r
回车\b
空格\f
换页符\\
斜杠\'
单引号\"
双引号\xnn
\unnn
字符串转换:toString()
:只要null和undefined没有这个要领。
每一个字符串也都有一个toString()要领,该要领返回字符串的一个副本。多半情况下,挪用toString()要领没必要通报参数,然则,在挪用数值的toString()要领时,能够通报一个参数:输出数值的基数。这个要领唯一要做的就是返回响应值的字符串示意。
var num = 10;
console.log(num.toString());//"10"
console.log(num.toString(2));//"1010"
String()
:适用于一切范例,遵照以下划定规矩
假如值有toString()要领,则挪用该要领(没有参数)并返回响应效果
假如值是null,则返回”null”
假如值是undefined,则返回”undefined”
JSON.stringfy()
6.Object范例
ECMAScript中的对象实在就是一组数据和功用的鸠合。
ECMAScript中Object是一切对象的基本。
明白:Object范例是一切它的实例的基本,换句话说,Object范例所具有的任何属性和要领也一样存在于更详细的对象中。
-属性描述符
-属性定义
-存在性
-罗列
-遍历
Object的实例都具有以下属性和要领
1.Constructor
:保留着用于建立当前对象的函数
2.hasOwnProperty
(propertyName):用于搜检给定的属性在当前对象实例中(而不是原型中)是不是存在。个中作为参数的属性名必需以字符串指定
3.isPrototypeOf(object)
:用于搜检传入的对象是不是是另一个对象的原型
4.toLocalString()
:返回对象的字符串示意,该字符串与实行环境相对应
5.toString()
:返回对象的字符串示意
6.valueOf()
:返回对象的字符串、数字或布尔值示意。一般与toString()要领的返回值雷同
操纵符
一元操纵符
只能操纵一个值的操纵符叫一元操纵符。
一元操纵符是ECMAScript中最简朴的操纵符。
1.递增和递减操纵符
递增递减操纵符直接自创C,而且各有两个版本:前置型和后置型。顾明思义,前置型应当让位于要操纵的变量之前,而后置型应当位于要操纵的变量以后。
前置型
var num1 = 1;
var num2 = 2;
var num3 = ++num1 + num2;//4
后置型
var num1 = 1;
var num2 = 2;
var num3 = num1++ + num2;//3
上述两段代码得出了差别的效果,缘由就在与,后置递增递减与前置递增递减有一个非常重要的区分,即后置递增递减操纵是先返回变量的当前值,再将变量的值加1
。
2.一元加和减操纵符
一元加和减操纵符重要用于基本的算术运算,也能够用于转换数据范例
布尔操纵符
布尔操纵符一共有三个:非(NOT)、与(AND)、或(OR)。
1.逻辑非
逻辑非操纵符由一个叹号示意(
!
),能够运用于ECMAScript中的任何值。不管这个值是什么数据范例,这个操纵符都邑返回
一个布尔值。同时运用两个逻辑非操纵符,实际上就会模仿Boolean()转型函数的行动
2.逻辑与
逻辑与操纵符由两个和号(&&)示意,有两个操纵数且可运用于任何范例的操纵数。逻辑与属于短路操纵,即假如第一个操纵数求值效果是false,那末就不会对第二个操纵数求值。
当两个值都为真值时,效果为true。当两个值为一真一假时,效果为false。当两个值都为假值时,返回false。
个中一个值不是布尔值时:遵照以下划定规矩
第一个操纵数为假,返回第一个
第一个操纵数为真的时刻,返回第二个。
假如第一个操纵数是对象,则返回第二个操纵数
var a = {b:1};
a && ‘ss’//”ss”假如第二个操纵数是对象,则只要在第一个操纵数的求值效果为true的情况下才会返回该对象
‘ss’ && a//Object {b: 1}假如两个操纵数都是对象,则返回第二操纵数
var c = {d:2};
c && a//Object {b: 1}假如有一个操纵数是null,则返回null
假如有一个操纵数是NaN,则返回NaN
假如有一个操纵数是undefined,则返回undefinded
3.逻辑或
与逻辑与操纵符类似,逻辑或操纵符也是短路操纵符。也就是说,假如第一个操纵数的求值效果为true,就不会对第二个操纵数求值了。
第一个操纵数为真,返回第一个 第一个操纵数为假,返回第二个
乘性操纵符
ECMAScript定义了3个乘性操纵符:乘法、除法和模
Infinity*0//NaN
0/0//NaN
Infinity/Infinity//NaN
加性操纵符
1.加法(转字符串)
两个操纵符都是数值
实行通例的加法盘算。
Infinity + -Infinity//NaN
假如有一个操纵数是字符串
假如两个操纵符都是字符串,则将第二个操纵符与第一个操纵符拼接起来
假如只要一个操纵符是字符串,则将另一个操纵数转换为字符串,然后再将两个字符串拼接起来。
假如这个操纵数是对象、数值或布尔值,则挪用它们的toString()要领获得响应的字符串值,然后再运用前面关于字符串的划定规矩。关于null和undefined,则离别挪用String()函数并获得字符串”undefined”和”null”。
2 + '' //"2"
2.减法(转数值)
假如两个操纵数都是数值
实行通例的算术减发操纵并返回效果,假如有一个操纵数是NaN,则效果是NaN
Infinity - Infinity//NaN
假如有一个操纵数不是数值
假如有一个操纵数是字符串、布尔值、null或undefined,则先在背景挪用Number()函数将其转换为数值,然后再依据前面的划定规矩实行减法盘算。假如转化的效果是NaN,则减法的效果就是NaN。
假如有一个操纵数是对象,则挪用对象的valueOf()要领以获得示意该对象的数值。假如获得的值是NaN,则减法的效果是NaN。假如对象没有valueOf()要领则挪用其toString()要领并将获得的字符串转换为数值。
5 – true//4
关联操纵符
假如两个操纵数都是数值,则实行数值比较
假如两个操纵数都是字符串,则比较两个字符串对应的字符编码值
假如一个操纵数是数值,则将另一个操纵数
转换为数值
,然后实行数值比较var result = ’23’ < ‘3’//true
var result = ’23’ < 3//false
相称操纵符
1.相称和不相称
先转换再比较
假如有一个操纵数是布尔值,则在比较相称性之前,先将其
转换为数值
假如有一个操纵数是字符串,另一个操纵数是数值,先将其
转换为数值
假如有一个操纵数是对象,另一个不是,则挪用对象的valueOf()要领,用获得的基本范例值按前面的基本划定规矩举行比较
null和undefined是相称的
要比较相称性之前
不能将null和undefined转换
为任何其他值假如两个操纵数都是NaN,相称操纵符也返回false,按划定规矩,NaN不等于NaN
2.全等和不全等
仅比较而不转换
"55" !== 55 //true
前提操纵符
variable = boolean_expression ? true_value : false_value
本质上,这段代码的寄义就是基于对boolean_expression求值的效果,决定给变量variable赋什么值。假如求值效果为true,则给变量赋true_value;假如求值效果为false,则给变量variable赋false_value值。
赋值操纵符
简朴的赋值操纵符由等号示意,其作用就是把右边的值赋给左边的变量。
逗号操纵符
逗号操纵符多用于声明多个变量;但除此之外,逗号操纵符还用来赋值。在用于赋值时,逗号操纵符总会返回表达式中的末了一项。
var num = (5,2,0); num//0;