ECMAScript基础

    xiaoxiao2024-05-07  7

    开始读《JAVASCRIPT高级程序设计》 第2章 ECMAScript基础 JavaScript实质上是ECMAScript在web环境中的实现,还有其他实现(如Flash的ActionScript等)。因此了解基本的ECMAScript相当于掌握javascript的基础。 1。ECMAScript的基础概念: 1)区分大小写 2)变量是弱类型(解释型语言的基本特点) 3)每行结尾的分号可有可无(与java不同) 4)注释的形式与java相同(单行或者块注释) 5)大括号代表代码块{} 2。变量,使用var定义。如var test="test1" 当然,变量是弱类型,并且可以不被初始化而定义 var test="test1" var test2; test=1; 建议采用匈牙利类型标记法来命名变量。 3.关键字和保留字(略) 4。原始值和引用值 与java类似,变量分成原始类型与引用类型两类: 1)原始值存储在stack中 2)引用值是存储在heap中的对象,存储在变量处的是一个point 5。原始类型: 1)ECMAScript有5种原始类型:Undefined、Null、Boolean、Number和String。可以使用typeof来判断一个值是否在某类型的范围内。如: var  s = " test " ;alert( typeof  s)   // 输出"string" 注意:type null返回object,因为null被认为是对象的占位符。 2)Undefined类型 当变量未初始化时,该变量的默认值就是undefined。但是,undefined并不同于未定义的值。但是,typeof并不区分两者,比如: var  temp1;alert( typeof  temp1);   // 未初始化,输出undefined alert( typeof  temp2);    // 未定义,也是undefined 函数无返回值,返回的也是undefined 3)Null类型 Null只有一个值,也就是null。Undefined本质上是从Null派生来的,因此两者相等: alert(null==undefined);  //输出true 但两者意义不同,Undefined表示变量未被初始化之前的值,而Null则表示尚未存在的对象,也就是对象的占位符。 4)Boolean类型 Boolean有两个值:true,false 5)Number类型 Number类型很有趣,Number可以表示32位的数字,也可以表示64位的浮点数,以0开头的数字当成八进制,以ox开头即为十六进制。有趣的地方在于所有数字运算结果都是返回十进制! 在ECMAScript中,浮点数的计算本质上是存储的是字符串。 Number类型的大小在Number.MAX_VALUE和Number.MIN_VALUE之间 无穷大用Infinity表示,如你所见,Number.MAX_VALUE就是Infinity,而Number.MIN_VALUE就是-Infinity,可以通过isFinite(n)来判断n是否超过界限 最后,还有一个特殊值是NaN,表示Not a Number(非数),非数产生在类型转换失败时,注意,它与自身不相当:alert(NaN==NaN);  //输出false 不推荐使用NaN,我们可以通过isNaN()来判断是否是非数(很常用咯) 6) String类型 String是唯一没有固定大小的原始类型,可以存储0或者多个Unicode字符。与java不同的是,可以使用双引好和单引号来声明字符: var s1="test1"; var s2='test2'; 常见转义符与其他语言相同。 6。类型转换 1)转换成字符串: Boolean,String和Number类型本质上都是伪对象,他们都有toString()方法(与java相同) Number类型的toString()有两种模式: toString(),返回数字的十进制 toString(n),返回n进制的字符串(n为2,8,10,16) 2)转换成数字: 两个方法:parseInt()和parseFloat()方法。用法略过,需要注意的是parseInt如果没指定基数,会把以0开始的解析为8进制。parseFloat反而不会。 3)强制类型转换: 3种强制类型转换: String(value); Boolean(value); Number(value); 规则如下: (1)String(value)与toString()基本一样,除了对null或者undefined的转换之外,如: var s1=String(null); //通过 var oNull=null; var s2=oNull.toString(); //报错 (2)Boolean(value),如果该value是空字符串、数字0、undefined或者null,返回false,其他返回true (3)Number()与parseInt和parseFloat基本相同,不同的是Number()将转换整体,如果转换失败返回NaN。如: Number( false )  ; //   0 Number( true );   //    1 Number( new  Object());    //   NaN Number(' 5.6 . 7 ');     //   NaN 7。引用类型: 1)Object类:类似于java中java.lang.Object的地位和作用,js中所有类都继承此类而来。它包含下面的属性: (1)Constructor——对创建该对象函数的引用 (2)Prototype——对该对象对象原型的引用,对所有的类,它将返回一个Object实例 (3)HasOwnProperty(property)——判断是否有某个属性 (4)IsPropertOf(object)——判断该对象是否为另一个对象的原型 (5)PropertyIsEnumerable(property)——判断对象的属性是否可以枚举 (6)ToString()——返回对象的原始字符串表示 (7)ValueOf()——返回最适合该对象的原始值,对于许多类,它的结果与ToString()相同 2)Boolean类,尽量避免使用,注意的是,在Boolean表达式中,所有的值将被自动转化为true,所以下面的输出: var oFalseObject=new Boolean(false); alert(oFalseObject&&true);  //输出true,而不是false 3) Number类,是Number原始类型的引用类型,应该少使用此类,尽量使用原始类型。需要注意3个方法: (1)toFixed():返回具有指定位数小数的字符串,如: var oNumberObject=new Number(99); alert(oNumberObject.toFixed(2));  // 输出99.00  (2) toExponential(),返回用科学记数法表示的数字的字符串形式,如: var oNumberObject=new Number(99); alert(oNumberObject.toExponential(1));  //输出9.9e+1 (3)toPrecision(),对数进行舍入,返回尽可能接近真实值的数字,如: var oNumberObject=new Number(99); alert(oNumberObject.toPrecision(3));  //输出99.0 注意,这3个方法都将进行四舍五入操作 4)String类,是String原始类型的对象,常见方法见下面的例子: var  oStringObject = new  String( " hello world " );alert(oStringObject.length);   // 输出11 alert(oStringObject.toString() == oStringObject.valueOf());   // 输出true alert(oStringObject.charAt( 1 ));    // 输出e alert(oStringObject.charCodeAt( 1 ));  // 输出e的字符代码:101 alert(oStringObject.concat( " ,china " ));    // 输出hello world,china alert(oStringObject.indexOf( " e " ));    // 输出1 alert(oStringObject.lastIndexOf( " o " ));   // 输出7 var  oStringObject1 = new  String( " yellow " ); var  oStringObject2 = new  String( " brick " ); var  iResult = oStringObject1.localeCompare(oStringObject2);   // 根据本地比较 if (iResult > 0 ) {  alert("oStringObject1在oStringObject2后面");} else   if (iResult < 0 ) {   alert("oStringObject1在oStringObject2前面");} else    alert( " oStringObject1和oStringObject2相同 " );alert(oStringObject.substring( 3 , 7 ));   // 输出"lo w" alert(oStringObject.slice( 3 , 7 ));   // 输出"lo w" alert(oStringObject.toUpperCase());alert(oStringObject.toLowerCase());alert( " 中国 " .toLocaleLowerCase()); 8.操作符和语句,省略大部分操作符的介绍和控制语句,与其他语言(java,ruby)基本相同,需要注意的摘抄如下: 1)delete操作符:用于删除对以前定义的对象属性或者方法的引用,如: var  o = new  Object();o.name = " dennis " ;alert(o.name);  // 输出dennis delete  o.name;    // 解除引用 alert(o.name);   // 输出undifined

    2)for ... in语句,严格的枚举语句,用于枚举对象属性 3)switch可以作用于字符串,而不仅仅是整数 4)不支持重载(与ruby相同),可以通过arguments对象来变相实现 5)在ECMAScript中,函数其实是完整一个对象(与ruby相同,或者说动态语言的基本特点),可以采用: var function_name=new Function(arg1,arg2,arg3,...,function_body); 来定义函数(速度比普通方法慢)。函数可以作为参数传递,函数的length属性返回此函数的参数个数 6)ECMAScript的闭包概念与其他动态语言的概念很不同,我还不大理解,过段时间好好研究一下。(写入备忘录)

    文章转自庄周梦蝶  ,原文发布时间5.17

    相关资源:ECMAScript 基础知识
    最新回复(0)