JavaScript变量及数据类型

“JavaScript 变量均为对象。当您声明一个变量时,就创建了一个新的对象。”  ???

JavaScript数据类型分为两类:原始类型 和 引用类型。

原始类型:ECMAScript 的 Boolean 值、数字和字符串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。如String类型变量有length属性,'abc'.length; 总而言之,3 种主要的原始类型 Boolean 值、数字和字符串都有 toString() 方法,可以把它们的值转换成字符串。

引用类型:引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象。从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。

 

  • 基本类型有5种:Number、String、Boolean、Undefined、Null;
  • 引用类型:Object、Number、String、Boolean 、Function、Array、Date 。。。;

ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。[http://www.w3school.com.cn/js/pro_js_primitivetypes.asp]

 

 

类型特性:

  • 类型Undefined只有一个值——undefined, undefined 是声明了变量但未对其初始化时赋予该变量的值.
  • 类型Null只有一个值——null,从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因。如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。 undefined==null-->true;  null==null-->true;
  • 类型Boolean只有两个值:true + false
  • Number类型:ECMA-262 中定义的最特殊的类型是 Number 类型。这种类型既可以表示 32 位的整数,还可以表示 64 位的浮点数。
  • 八进制和十六进制:八进制字面量的首数字必须是 0,其后的数字可以是任何八进制数字(0-7);十六进制的字面量,首位数字必须为 0,后面接字母 x,然后是任意的十六进制数字(0 到 9 和 A 到 F)。这些字母可以是大写的,也可以是小写的。尽管所有整数都可以表示为八进制或十六进制的字面量,但所有数学运算返回的都是十进制结果。
  • 类型Number有一个特殊值:NaN(非数值 Not a Number),这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在JavaScript中,任何数值除以0会返回NaN,因此不会影响其他代码的执行。NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。  表达式 NaN==NaN -->false 。JavaScript中有一个isNaN()函数,这个函数接受一个参数,该参数可以使任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串”10“或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。
  • 数值转换:有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。第一个函数,即转型函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。这3个函数对于同样的输入会返回不同的结果。
  •   
  • String类型:String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。String 类型的独特之处在于,它是唯一没有固定大小的原始类型。要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的toString()方法。数值、布尔值、对象和字符串值都有toString()方法。但null和undefined值没有这个方法。多数情况下,调用toString()方法不必传递参数。但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。2. 在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String()
  • String 对象是 ECMAScript 中比较复杂的引用类型之一。同样,本节的重点只是 String 类的基本功能。更多的高级功能请阅读本教程相关的章节,或参阅 JavaScript String 对象参考手册。String 对象的所有属性和方法都可应用于 String 原始值上,因为它们是伪对象。常用方法:charAt()  charCodeAt()  concat()  indexOf()  lastIndexOf()  localeCompare()  slice()  substring()  toLowerCase()  toUpperCase()
  •   
  • Boolean类型:虽然你应该了解 Boolean 对象的可用性,不过最好还是使用 Boolean 原始值
  • false==0 -->true;  true==1 -->true;

 

JavaScript提供了两个操作符用于类型检测:

  • typeof  对一个值使用typeof操作符可能返回下列某个字符串:"number"  "string"  "boolean"  "undefined"  "function"  "object"--(for {} or null);  在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object"。
  • instanceof

类型检测特殊情况:

  • typeof null --> Object;  您也许会问,为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
  • typeof aNotExistsVariable --> 'undefined'  如果对 未声明的变量 使用除 typeof 之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上。
  • 当函数无明确返回值时,返回的也是值 "undefined".

 

数值转换示例:

  • Number():
  • Number(true) -->1; Number(false) -->0;
  • Number(null) -->0; 
  • Number(undefined) -->NaN;
  • Number("") -->0;
  •   
  • parseInt(str, mode): parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符串不是数字字符或者负号,parseInt()会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。如果第一个字符是数字字符,praseInt()会继续解析第二个字符,知道解析完所有后续字符或者遇到了一个非数字字符。
  • parseInt("") -->NaN;
  • parseInt(22.5) --> 22;
  •   
  • parseFloat(str)

 

特殊值比较:

  • ""==0
  • undefined==0
  • null==0
  • Number(null) -->
  • Number(undefined) -->
  • Number({}) -->
  • Number([]) -->
  • {}==0 -->SyntaxError: Unexpected token '=='
  • {}=='' -->SyntaxError: Unexpected token '=='
  • {}.toString() -->SyntaxError: Unexpected token '.'
  • 0=={} -->false
  • []==0
  • ""=={}
  • ""==[]

 

Object类型:

对象其实就是一组数据和功能的集合。

ECMAScript 中的所有对象都由这个对象继承而来,Object 对象中的所有属性和方法都会出现在其他对象中,所以理解了 Object 对象,就可以更好地理解其他对象。

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

  ● constructor——保存着用于创建当前对象的函数

  ● Prototype ——对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

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

  ● isPrototypeOf(object)——用于检查传入的对象是否是另一个对象的原型

  ● propertyIsEnumerable(propertyName)——用于检查给定的属性是否能够使用for-in语句来枚举

  ● toString()——返回对象的字符串表示

  ● valueOf()——返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。

 

Reference:

  • http://www.w3school.com.cn/js/pro_js_primitivetypes.asp
  • http://www.cnblogs.com/java-my-life/archive/2012/08/06/2625065.html
posted @ 2017-03-26 00:07  hexiaoco  阅读(77)  评论(0)    收藏  举报