js基本数据类型

ECMAScript 中有5种简单数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number和String。一种复杂数据类型:object。

typeof操作符

由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.
通过typeof关键字,对这5种数据类型会返回下面的值(以字符串形式显示)
undefined ---------- 如果值未定义 Undefined

boolean ---------- 如果这个值是布尔值 Boolean

string ---------- 如果这个值是字符串 String

number ---------- 如果这个值是数值类型 Number

object ---------- 如果这个值是对象或null Object

需要注意的是typeof null返回为object,因为特殊值null被认为是一个空的对象引用。

typeof是一个操作符而不是函数,圆括号可以使用但不是必须

Undefined类型

Undefined类型只有一个值,即特殊的undefined

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

声明但未初始化与尚未定义的变量还是不一样:

var message;     //age未声明

alert(message);    //"undefined"

alert(age);   //产生错误

alert(typeof(message));     //"undefined"

alert(typeof(age));     //"undefined"

 Null类型

Null类型也只有一个值,这个值是特殊的null,从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回object的原因。

如果定义的变量将来准备用于保存对象,那么最好将该变量初始化为null,而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。

实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。

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

Boolean类型

此类型只有两个值:true和false

注意:boolean类型的字面值true和false是区分大小写的。

avaScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean(),例如:

    var message = 'Hello World';
    var messageAsBoolean = Boolean(message);

下表列出了各种数据类型对应的转换规则

数据类型 转换为true 转换为false
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零数字值 0和NaN
Object 任何对象 null
Undefined 不适用 undefined

 

 

 

 

 

 

Number类型

最基本的数值字面量格式是十进制整数,十进制可以在代码中直接输入。

除了十进制,还可以用八进制和十六进制。

八进制字面值的第一位必须是零(0),然后八进制数字序列为(0~7),如果数字超出了0~7这个范围,那么前导0将被忽略,后面的数值按十进制解析。

var a = 070;   //八进制状态下的56
var b = 079;   //无效的八进制,解析为79
var c = 08;    //无效的八进制,解析为8

八进制字面量在严格模式下是无效的

十六进制字面值前两位必须是0x,后跟任何十六进制数字(0~9及A~F),字母不区分大小写。

在算术运算时,八进制和十六进制都会被转换成十进制数值。

 1.浮点数

所谓浮点数值,就是该数值中必须包括一个小数点,并且小数点后面必须至少有一个数字。

由于保存浮点数所占用内存是整数的两倍,所以ECMAScript会尽可能将浮点数转换为整数。

如果小数点后没有任何数字或浮点数本身就表示一个整数,就会被转换为整数。

console.log(1.)    //1
console.log(10.00)   //10

默认情况下,ECMAScript会将小数点后面带6个零以上的浮点数值转换为以e表示法表示的数值。(例:0.0000003会被转换为3e-7).

浮点数值的最高精度为17位。但算术计算精度远不如整数。例:0.1+0.2不是0.3,而是0.30000000000000004,这个小小的舍入误差会导致无法测试特定的浮点数值。

永远不要测试某个特定的浮点数值。

关于浮点数值计算产生舍入误差的问题:这是使用基于IEEE754数值的浮点计算的通病,ECMAScript并非独此一家,其他使用相同数值语言的也存在这个问题。

2.NaN

NaN(Not a Number),即非数值是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。

NaN本身有两个特点:

1.任何涉及NaN的操作(例如NaN*10,NaN/10)都会返会NaN。

2.NaN与任何数值都不相等,包括NaN本身。

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

isNaN(),判断是否“不是数值”,这个函数接受一个参数,该参数可以是任何类型,isNaN()在接收到一个值之后,会尝试将值转换为数值,可以转换的将返回false,不能转换为数值的将会返回true。

3.数值转换

有3个函数可以把非数值转换为数值:number(),parseInt()和parseFloat()。

number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换为数值。

  • 如果是Boolean,true和false将分别被转换为1和0。
  • 如果是数字值,只是简单传入和返回。
  • 如果是null值,返会0。
  • 如果是undefined,返回NaN。
  • 如果是字符串则较为复杂。

parseInt()在转换字符串的时会忽略字符串前的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者是负号,返回NaN。

parseInt()可以接受两个参数,第一个为要转换的参数,第二个为基数(进制)。如果不指定基数意味着让parseInt()自己决定如何解析,因此为了避免错误的解析,建议指定基数。
parseFloat()用于转换浮点数。

String类型

String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。

字符串的长度可以通过其length属性取得。

var text = "this string length is 24";
console.log(text.length);         //24

转换字符串可以通过几乎每个值都有的toString()方法。

var a = 11;
console.log(a,typeof a);   //11 "number"
var b = a.toString();
console.log(b,typeof b);   //11 string

object类型

ECMAScript中的对象其实就是一组数据和功能的集合。可以通过以下方式创建一个对象:

var obj = new object();

原文地址:https://www.cnblogs.com/loseway/p/9742167.html