当前位置: 移动技术网 > IT编程>开发语言>JavaScript > js的数据类型详解

js的数据类型详解

2018年12月02日  | 移动技术网IT编程  | 我要评论

基本数据类型: undefined;null;boolean;number;string

复杂数据类型: array,date,object(注: 与java对象有点区别的,js对象可以添加属性)

object本质上是由一组无序的名值对组成的

(js数据类型可以更改,但是不建议改)
var msg = "message";
msg = 1;
有效,但不建议使用

typeof操作符(检测给定变量的数据类型),可能返回的结果如下:

“undefined”——如果这个值未定义(对未初始化和未声明的变量);

“boolean”——如果这个值是布尔值;

“string”——如果这个值是字符串;

“number”——如果这个值是数值;

“object”——如果这个值是对象或null或[ ];

“function”——如果这个值是函数。

注意: typeof 是一个操作符而不是函数,因此圆括号尽管可以使用,但不是必需的。
eg:
var message = "some string";
alert(typeof message); // "string"
alert(typeof(message)); // "string"

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

undefined类型

声明了但是没有初始化的变量被默认赋值为undefined;未声明的变量使用会报错,只除了使用typeof

undefined === void 0 //true

null类型

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null 而不是其他值

boolean类型(true 和false)

要将一个值转换为其对应的boolean 值,可以调用转型函数boolean()

转换规则:

数据类型    转换为true的值                   转换为false的值
boolean         true                            false
string      任何非空字符串                      ""(空字符串)
number      任何非零数字值(包括无穷大)          0和nan
object      任何对象                            null
undefined       n/a                          undefined

n/a(或n/a),是not applicable 的缩写,意思是“不适用

number类型

注意: 浮点数值计算会产生舍入误差的问题(例如: 0.1 + 0.2 = 0.30000000000000004)

数值范围: 最小值 number.min_value 5e-324 -infinity(负无穷)

最大值 number.max_value 1.7976931348623157e+308 infinity(正无穷)

当数值超过范围时,会返回infinty,这个值是不可以参与计算的

可使用isfinite()函数判断,若在,为true

10/0 // 返回infinity

nan,即非数值(not a number)是一个特殊的数值
    这个数值用于表示一个本来要返回数值的操作数未返回数值的情况
    注意: 任何涉及nan 的操作(例如nan/10)都会返回nan,这个特点在多步计算中有可能导致问题。
        nan 与任何值都不相等,包括nan 本身。
        eg: alert(nan == nan); //false
    isnan()可判断值是否为数字,若是,返回false
    注意:isnan()会尝试将其他类型的转化为数字,若失败,为非数字:
    eg: 
    alert(isnan(nan)); //true
    alert(isnan(10)); //false(10 是一个数值)
    alert(isnan("10")); //false(可以被转换成数值10)
    alert(isnan("blue")); //true(不能转换成数值)
    alert(isnan(true)); //false(可以被转换成数值1)
数值转换:
number(): 可用于任何类型转为数字
eg:
var num1 = number("hello world!"); //nan,如果含有任何不能转为数字的字符,都是nan(undefined)
var num2 = number(""); //0,空字符串
var num3 = number("000011"); //11,忽略前面的0;会识别16进制(0x12->18);识别浮点数
var num4 = number(true); //1,true-1;false-0

parseint();parsefloat(): 仅用于字符串转数字;如果第一个字符不是数字或负号.返回nan,包括空字符串;
    如果是,继续解析,直到碰到不是数字的,忽略后面的所有字符
var num1 = parseint("1234blue"); // 1234
var num2 = parseint(""); // nan
var num3 = parsefloat("22.34.5"); //22.34
var num4 = parsefloat("0908.5"); //908.5

parseint()不识别浮点数,碰到小数点就会开始忽略;
    识别2进制8进制和16进制,一般传2个参数(第二个为进制,包括十进制)
var num5 = parseint(22.5); // 22
var num6 = parseint("af", 16); //175
var num7 = parseint("af"); //nan

parsefloat()如果没有小数点,返回整数;只识别10进制
var num8 = parsefloat("1234blue"); //1234
var num9 = parsefloat("0xa"); //0

string类型

ecmascript 中的字符串是不可变的,改变都是新创建的字符串,销毁原来的字符串

tostring(): 几乎所有类型都有 tostring()方法,但注意 null 和 undefined 没有

数字类型的可以添加参数,参数为进制数

string(): 这个函数能够将任何类型的值转换为字符串,null 和 undefined 返回对应的字面量

object类型

object 的每个实例都具有下列属性和方法:

- constructor:保存着用于创建当前对象的函数,构造函数(constructor) 就是 object()。

- hasownproperty(propertyname):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyname)必须以字符串形式指定(例如:o.hasownproperty(“name”))。

- isprototypeof(object):用于检查传入的对象是否是传入对象的原型。

- propertyisenumerable(propertyname):用于检查给定的属性是否能够使用 for-in 语句来枚举。与 hasownproperty()方法一样,作为参数的属性名必须以字符 串形式指定。

- tolocalestring():返回对象的字符串表示,该字符串与执行环境的地区对应。 tostring():返回对象的字符串表示。

- valueof():返回对象的字符串、数值或布尔值表示。通常与 tostring()方法的返回值 相同。

 数据类型的转换:
 隐式:(直接转,按规则)
           string+number=string
           string+boolean=string/boolean
           number+boolean=number
           boolean+boolean=number
显示:(使用相应的方法转)
           xxx.tostring()
           parseint(xxx)
           parsefloat()
           isnan(xxx)----true/false   (is not a number)

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网