Javascript:数据类型与操作符

数据范例

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为小数,但在举行算术运算时其精度远远不如整数。

《Javascript:数据类型与操作符》

种种数值范例:十进制,八进制(在严厉形式下无效),十六进制
八进制字面量的第一名必需是0,然后是八进制数字序列(0~7)。假如字面值中的数值超越了局限,那末前导0将被疏忽,背面的数值将被当作十进制数来剖析

070//56
079//79

十六进制字面值的前两位必需是0x,后跟十六进制数字(0~9及A~F)。个中字母A~F可大小也可小写

0xA//10

在举行算术盘算时,一切以八进制和十六进制示意的数值终究都将被转换为十进制数值

数值局限:

《Javascript:数据类型与操作符》

整数检测

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

《Javascript:数据类型与操作符》

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;   
    原文作者:Murphywuwu
    原文地址: https://segmentfault.com/a/1190000003937523
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞