基本数据类型: 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)
如对本文有疑问, 点击进行留言回复!!
vue源码实战render.js与$nextTick的异步调用
同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!
【JavaScript笔记(一)】万丈高楼平地起 - 基本概念篇
网友评论