关闭

javascript高级程序设计笔记--js数据类型

标签: javascriptjs
295人阅读 评论(0) 收藏 举报
分类:
var操作符定义的变量将成为定义该变量的作用域中的局部变量。

ECMAScript的5种基本数据类型:undefined、null、boolean、number、string
和一种复杂数据类型:Object

var message = "some thing";
alert(typeof message); //string
alert(typeof(message)) //string


注意typeof是操作符而不是函数,因此不需要使用括号。
typeof null返回object,因为特殊值null被认为是一个空对象引用。(Object o;) 此时o指向null
函数在ECMAScript是对象,不是一种数据类型。
undefined类型只有一个值,即特殊的undefined。在使用var生命变量但未对其加以初始化时,这个变量的值就是undefined。
例如:
var message;
alert(message == undefined) //true


ECMAScript3引入undefined是为了正式区分空对象指针与未经初始化的变量。

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样只要直接检查null值就知道相应的变量是否已经保存了一个对象引用,例如:
if(car != null){
//对car对象执行某些操作
}


实际上undefined值是派生自null值的,因此ECMA-262规定对他们的相等性测试要返回true;
alert(null == undefined); //true



对于任何数据类型的值调用Boolean()函数,而且总会返回一个boolean值。至于返回true还是false取决于要转换值的数据类型及其实际值。
var message="hello";
if(message){
//true
}



ECMAScript中,任何数值除以0都会返回NaN,不会影响其他代码的执行,NaN有两个特点:任何涉及NaN的操作都会返回NaN,其次NaN和任何值都不相等,包括NaN本身,例如:
alert(NaN == NaN)  //false


isNaN()方法适用于对象。在基于对象调用isNaN()函数时,会首先调用该对象的valueOf()方法,然后确定该方法返回值是否可以转换为数值。如果不能则基于这个返回值再调用toString()方法,再测试返回值,而这个过程也是ECMAScript中内置函数和操作符的一般执行流程。

parseInt()在转换字符串时,更多地是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN(Number()对空字符串返回0)。parseInt()会继续解析第二个字符,知道解析完所有后续字符或遇到了一个非数字字符。例如"123blue"会被转换成123,因为blue会被完全忽略。类似地,"22.5"会被转换成22,因为小数点并不是有效的数字字符。如果字符串中的第一个字符是数字字符,parseInt()函数也能识别各种整数格式(2 8 10 16进制)。也就是说如果字符串以"0x"开头且后跟数字字符,就会将其当做一个十六进制整数,如果字符串以0开头且后跟数字字符,则会将其当做一个八进制数来解析。
parseInt()提供第二个参数:转换时使用的基数(即多少进制)。例如:
var num = parseInt("0xAF", 16);  或者 var num = parseInt("AF", 16); //省略0x

parseFloat()只进行十进制解析,十六进制始终会被解析成0,因为x是无效的的数字。

toString()也可以带参数(2,4,8,16)乃至任何有效进制格式作为基数。例如:
var age = 11;
alert(num.toString(16)) //"B"



在不知道要转换的值是不是null或undefined的情况下可以使用转型函数String(), 这个函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则:
1.如果值有toString()方法,则调用该方法并返回相应结果;
2.如果值是null,则返回"null";
3.如果值是undefined,则返回"undefined";

在ECMAScript中如果不给构造函数传递参数则可以省略后面的圆括号例如:var o = new Object;//有效但不推荐
Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
Object的每个实例都具有下列属性和方法:
1. constructor:保存着用于创建当前对象的函数。构造函数
2. hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中作为参数的属性名propertyName必须以字符串形式指定,例如o.hasOwnProperty("name");
3. isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
4. propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
5. toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
6. toString():返回对象的字符串表示。
7. valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
由于ECMAScript中object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。

hasOwnProperty例子:
<pre name="code" class="javascript">function extend(target,source){
//target 旧的 source新的  
for (var i in source){            
if(target.hasOwnProperty(i)){                
target[i]=source[i];            
}    
}    
return target;
}
var a1={"first":1,"second":"lyl","third":"bob"};
var b1={"third":"leo"};extend(a1,b1);
for(var i in a1){        
alert(a1[i]);//原本是bob,现在变成leo了
}




   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12622次
    • 积分:414
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:9篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论