【JavaScript】数据类型

2.4 数据范例

ECMAScript中有5种简朴数据范例(基本数据范例):Undefined、Null、Boolean、Number和String。另有1种庞杂数据范例–Object,Object本质上是由一组无序的名值对构成的。

2.4.1 typeof操纵符

typeof操纵符用来检测给定变量的数据范例,可以的返回值:

“undefined” 这个值未定义
“boolean” 这个值是布尔值
“string” 这个值是字符串
“number” 这个值是数值
“object” 这个值是对象或null
“function” 这个值是函数
例子:

var name = 'tg';
console.log(typeof name);  // "string"
console.log(typeof (name));  // "string"
console.log(typeof {}); // "object"

typeof是一个操纵符,背面的圆括号无足轻重。

2.4.2 Undefined范例

Undefined范例只要一个值,即特别的undefined。

假如在运用var声明变量但未对其加以初始化时,这个变量的值就是undefined。

var name;
console.log(name == undefined);  // true 

关于未声明过的变量,只能实行一项操纵,即运用typeof操纵符检测其数据范例(对未声明的变量挪用delete不会致使毛病(在非严厉情势下))

2.4.3 Null范例

Null范例也是只要一个值的数据范例,这个特别值就是null。null值可以看做是一个空对象指针。

console.log(typeof null);  // "object"

undefined实际上是派生自null值:

console.log(null == undefined);  // true

2.4.4 Boolean范例

Boolean范例有两个字面值:true和false,两个值是辨别大小写的。

要将一个值转换为其对应的Boolean值,可运用转型函数Boolean():

var name = 'tg';
console.log(Boolean(name);  // true

可以对任何范例的值挪用Boolean函数,而且总会返回一个Boolean值(true或false)

转换划定规矩:

  • 关于true或false,返回原值(true或false)

  • 关于String范例的值,任何非空字符串返回true,空字符串(””)返回false

  • 关于Number范例的值,任何非零数字值(包括无限大),返回true;0和NaN返回false

  • 关于Object范例的值,任何对象返回true,null返回false

  • 关于Undefined范例,undefined返回false(只要一个值)

2.4.5 Number范例

最基本的数值字面量花样是十进制整数。

var num = 15;

八进制(以8为基数) 以0开首,背面是(0~7)

var num = 070;  // 八进制的56

十六进制(以16为基数) 以0x开首,背面是(0~9及A~F),字母A~F可以大小写。

var num = 0xA;  //十六进制的10

注重:在举行算术盘算时,一切以八进制和十六进制示意的数值都邑被转换成是十进制。

1.浮点数值

浮点数值指包括一个小数点,而且小数点背面必需至少有一个数字。

var floatNum = 1.1;

保留浮点数值须要的内存空间是保留整数值的两倍。

关于那些极大或极小的数值,我们可以运用科学计数法(e示意法)来示意浮点数值。

e示意法示意的数值即是e前面的数值乘以10的指数次幂:

var floatNum = 3.125e7;  // 31250000
var floatNum1 = 3e-7;  //0.0000003

默许状况下,ECMAScript会将那些小数点背面带有6个零以上的浮点数值转换为以e示意的数值。

var floatNum1 = 3e-7;  //0.0000003

浮点数的最高精度是17位小数。

0.1 + 0.2 = 0.3000000000000004; // 不是即是0.3

2.数值局限

基于内存的限定,ECMAScript只能保留有限的数值。
ECMAScript可以示意的最小数值保留在Number.MIN_VALUE(最小值)中,这个值是5e-324;可以示意的最大数值保留在Number.MAX_VALUE(最大值)中,这个值是1.7976931348623157e+308.

假如某次盘算的效果得到了一个超越JavaScript数值局限的值,那末这个数值就会被转换成特别的Infinity值;假如这个值是负数,则会被转换为-Infinity(负无限),假如这个数值是整数,则会转换成Infinity(正无限)。

注重:Infinity是不能介入盘算的数值。

用isFinite()来推断这个值是不是无限,该函数接收一个参数。假如参数位于最小与最大数值之间,返回true。

console.log(isFinite(1));  //true
console.log(isFinite(Infinity));  // false

3.NaN

NaN(Not a Number)示意非数值,这个数值用于示意一个原本要返回数值的操纵数未返回数值的状况。

注重点:

  • 任何触及NaN的操纵都邑返回NaN。

  • NaN与任何值都不相称,包括NaN自身。

 console.log(NaN == NaN);  //false

我们可以用isNaN()函数来推断是不是非数值,该函数接收一个参数,可所以任何范例。

console.log(isNaN(NaN));  // true

isNaN()在接收到一个值(可所以任何范例)以后,会尝试将这个值转换为数值,某些不是数值的值会直接转换为数值,比方:字符串”10″或Boolean值。而任何不能被转换为数值的值都邑致使这个函数返回true。

console.log(isNaN(NaN));  // true
console.log(isNaN(10));  // false
console.log(isNaN('blue'));  //  true

4.数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()

转型函数Number()可以用于任何数据范例,背面两个是特地用于把字符串转换为数值。

Number()函数的转换划定规矩:

  • 假如是Boolean值,true和false将离别转换为1和0

  • 假如是数字值,只是简朴的传入和返回

  • 假如是null值,返回0

  • 假如是undefined,返回NaN

  • 假如是字符串中只包括数字(包括前面带正负号),则将其转换为十进制数值(前导的零会被疏忽)

  • 假如字符串中包括有用的浮点花样,如1.1,则将其转换为对应的浮点数值

  • 假如字符串中包括有用的十六进制,如0xf,则将其转换为雷同大小的十进制数值

  • 假如字符串是空的,返回0

  • 假如字符串中包括上述花样之外的字符,返回NaN

  • 假如是对象,则挪用对象的valueOf()要领,然后遵照前面的划定规矩转换返回的值。假如转换的效果是NaN,则挪用对象的toString()要领,然后再次遵照前面的划定规矩转换返回字符串值

console.log(Number('tg'));   // NaN
console.log(Number(''));   // 0
console.log(Number('0011'));  // 11
console.log(Number(true));   //1

一元加操纵符的操纵与Number函数划定规矩雷同。

parseInt()

parseInt()会疏忽字符串前面的空格,直到找到第一个非空格字符。假如第一个字符不是数字字符或负号,就会返回NaN。假如第一个字符是数字字符,就会继承剖析,直到剖析完一切后续字符或许碰到了一个非数字字符。

parseInt()也能辨认八进制(在ECMAScript 5中没法辨认,将开首的0看成0)和十六进制,最后会转换成十进制。

console.log(parseInt('123tg'));  // 123
console.log(parseInt(''));   // NaN
console.log(parseInt('070'));  // 70
console.log(parseInt('0xf'));  //15
console.log(parseInt(22.5));  // 22

我们还可认为parseInt()供应第二个参数,指定须要转换的进制。

console.log(parseInt('0xAF',16));  // 175
console.log(parseInt('AF',16));  // 175
console.log(parseInt('AF'));  // NaN
console.log(parseInt('070',8));  // 56
console.log(parseInt('70',8));  // 56

假如供应了第二个参数,要转换八进制和十六进制时,可省略0和0x。

parseFloat()和parseInt()相似,也是从第一个字符(位置0)最先剖析每一个字符,而且一向剖析到字符串末端,或许剖析到碰到一个无效的浮点数字字符为止,换句话说,字符串中的第一个小数点是有用的,背面的小数点是无效的,它还会疏忽前导的零,只会剖析十进制值。

console.log(parseFloat('123tg'));  // 123
console.log(parseFloat('22.12.4'));   // 22.12
console.log(parseFloat('070'));  // 70
console.log(parseFloat('0xf'));  //0
console.log(parseFloat(22.5));  // 22.5

2.4.6 String范例

String范例用于示意由零或多个16位Unicode字符构成的字符序列,即字符串。字符串可以由双引号或单引号示意。

var name = 'tg';

用双引号示意的字符串和用单引号示意的字符串完全雷同,但要确保引号前后一致,也就是说以双引号开首的必需以双引号末端,以单引号开首的必需以单引号末端。

1.字符字面量

String数据范例包括了一些特别的字符字面量,也叫转义序列。

\n  换号
\t   制表
\b  空格
\r  回车
\f  进纸
\\  斜杠
\'  单引号
\"  双引号
\xnn  以十六进制代码nn示意的一个字符(n为0~F),比方:\x41示意"A"
\unnn  以十六进制代码nnnn示意的一个Unicode字符(n为0~F)。比方:\u03a3示意Σ

这些字符字面量可以出现在字符串中的恣意位置,会被当作一个字符来剖析。

var name = 'tg\u03a3';
console.log(name);  //tgΣ
console.log(name.length);  // 3

任何字符串的长度都可以接见其length属性获得。

2.字符串的特性

ECMAScript中的字符串是不可变的。一旦建立,值就不会转变。

背景逻辑:要转变某个变量保留的字符串,首先要烧毁本来的字符串,然后用另一个包括新值的字符串添补该变量。

3.转换为字符串

要将一个值转换为字符串有两种体式格局:

运用每一个值(null和undefined除外)都有的toString()要领

var age = 1;
console.log(age.toString());  // "1"

我们还可以给toString()传入一个参数,输出数值的基数。

var num = 10;
console.log(num.toString());  // "10"
console.log(num.toString(2)); // 1010
console.log(num.toString(8));  // 12

可以运用转型函数String(),能将任何范例的值转换为字符串,转换划定规矩:

假如值有toString()要领,则挪用该要领并返回响应的效果
假如值是null,则返回null
假如值是undefined,则返回undefined

console.log(String(10));  // "10"
console.log(String(true));  // "true"
console.log(String(null));  // "null"
console.log(String(undefined));  // "undefined"

要把某个值转为字符串,还可以运用加号操纵符:

console.log( true + '');  // "true"

2.4.7 Object范例

ECMAScript中的对象实在就是一组数据和功用的鸠合。

对象可通过实行new操纵符后跟建立的对象范例的称号来建立。

var o = new Object();

假如不传参,可以省略背面的圆括号(不引荐)。

var o = new Object;

在ECMAScript中,Object范例是一切对象的基本。

Object的每一个实例都具有以下属性和要领:

  • Constructor:保留着用于建立当前对象的函数,比方上面的例子,组织函数就是Object()

  • hasOwnProperty(propertyName):用于搜检给定的属性在当前对象实例中是不是存在(而不是在实例的原型中),参数必需是字符串情势

  • isPrototypeOf(object):用于搜检传入的对象是不是是另一个对象的原型

  • propertyIsEnumerable(propertyName):用于搜检给定的属性是不是可以运用for-in语句来罗列,参数必需是字符串情势

  • toLocaleString():返回对象的字符串示意,该字符串与实行环境的区域对应

  • toString():返回对象的字符串表

  • valueOf():返回对象的字符串、数值或布尔值示意,一般和toString()返回的值雷同

    原文作者:sgosky
    原文地址: https://segmentfault.com/a/1190000008689520
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞