第三章(基本概念——语法,数据类型,流程控制语句,函数)

◆语法






●  区分大小写
  ECMAScript中的一切都区分大小写。


  
  
●  标识符
1:第一个字母必须是字母,下划线或$。
2:其他字符可以是字母,下划线,$,或数字。






●严格模式
1:要在整个脚本中启用严格模式,可以在顶部添加代码"use strict"
2:在函数内部的上方包含这条编译指令,也可以指定函数在严格模式下执行:
function doSometing(){
"use strict"
//函数体
}




----------------------------------------------------------------------------------------------------------------------------------------------------




◆变量


* ECMAScript中变量是松散类型的,可以用来保存任何类型的数据,换句话说,每个变量仅仅是一个用于保存值的占位符而已。




* 未经初始化的变量,会保存一个特殊值——undefined,ECMAScript也支持直接初始化变量: var message="hi";




* 用var定义的变量将成为定义该变量作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数退出后会被销毁:
function test(){
var message="hi";   //局部变量
}
test();
alert(message);    //错误!




* 省略var操作符,message就成了全局变量,这样,只要调用一次test()函数,这个变量就有定义,就可以在函数外部的任何地方访问到。




* var message="hi",found=false,age=29;




----------------------------------------------------------------------------------------------------------------------------------------------------




◆数据类型


* 5种简单数据类型(基本数据类型):Undefined、Null、Boolean、Number和String。
* 一种复杂数据类型————Object。
* ECMAScript不支持任何创建自定义类型的机制,所有的值最终都将是上述6种数据类型之一






●typeof操作符
typeof操作符的操作数可以是变量,也可以是数值字面量,它是一个操作符,可以typeof(a); 或typeof a;
注:函数在ECMAScript中是对象但是typeof会返回function类型。






●Undefined类型
1:Undefined类型只有一个值————undefined。
2:我们可以用undefined显式初始化一个变量。
3:对于未声明的变量,只能执行一项操作,即使用typeof操作符,返回undefined。






●Null类型
Null类型也是只有一个值的数据类型,就是null。从逻辑角度来看,null值表示一个空对象指针,typeof null 返回object
注:undefined值派生自null值,所以ECMAScript规定undefined==null返回true。


在保存对象的变量尚未保存真正的对象时,最好明确的让该变量保存null。






●Boolean类型
该类型只有两个字面值:true和false(必须小写)。
Boolean("test")转换成Boolean类型的值true。






●Number类型
1:字面量 :
var octalNum1=070;    //八进制,56
var octalNum2=079;    //无效的八进制,79
var octalNum3=08;     //无效的八进制,8
八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误。


var hexNum1=0xA;     //十六进制,10
var hexNum2=0x1f;    //十六进制,31
字母可大写可小写。


* 在进行算术计算时,所有的八进制和十六进制表示的数值最终都将被转换成十进制数值。


* 浮点数值需要的内存是保存整数值的两倍,因此ECMAScript会不失时机的将浮点数值转化为整数值


* 关于e
var floatNum=3.125e7;      //等于31250000  (e可大写)
var floatNum=3.14e-2;      //等于0.0314  (e可大写)


* 数值范围
超出MAX_VALUE的值将被自动转换为Infinity,超出MIN_VALUE的值将被自动转换为-Infinity。
如果某次计算返回了Infinity或-Infinity,那么该值将无法继续参与下一次运算。
isFinite()函数可以判断数是否有穷。






●NaN
1:任何涉及NaN的操作都返回NaN。
2:NaN与任何值都不相等,包括NaN本身。


*isNaN()函数可以判断是否是NaN。
对于对象有两步,先调用valueof()方法再判断,如果还是NaN,调用toString()方法,再测试返回值。






●数值转换
Number()              //用于任何数据类型。对于对象有两步,先调用valueof()方法再判断,如果还是NaN,调用toString()方法,再测试返回值。
parseInt()            //用于字符串
parseFloat()          //用于字符串
区别:1:Number('')为0  , parseInt('')为NaN
2:Number('070')为70  ,  ECMAScript3中parseInt('070')为56  ,  ECMAScript5中parseInt('070')为70。


使用两个参数 : parseInt('070',8);


parseFloat()只解析十进制,而且可以返回整数。 






●String类型
String数据类型包含一些特殊的字符字面量,也叫转义序列,这些字符字面量可以出现在字符串的任何位置。
length属性返回长度。如果字符串中包含双字节字符,可能不会返回正确的值。(转义字符是单字节)


* 转换字符串
toString()方法,不需要传参,但在调用数值时,可以传参表示转换为的进制。不能转换null和undefined。
String()方法,可以转换null和undefined。
例:num.toString();    String(num);






●object类型
对象可以通过new操作符后跟要创建的对象类型的名称来创建。
Object的每个实例都具有下列属性和方法。
* constructor :保存着用于创建当前对象的函数。对于 var o=new Object() 而言,构造函数就是Object
* hasOwnproperty(proopertyName) :用于检查给定的属性在当前对象的实例中(而不是在实例的原型中)是否存在,例:o.hasOwnproperty("name")。、
* isPrototypeof(object) :用于检查传入的对象是否是当前对象的原型
* propertyIsEnumerable(propertyName) :用于检查给定的属性是否能用for-in 语句枚举
* toLocaleString() :返回对象的字符串表示,该字符串与执行环境的地区对应
* toString() :返回对象的字符串表示
* valueOf() :返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。


BOM和DOM中的对象都属于宿主对象,由宿主实现提供和定义,ECMA-262 不负责定义宿主对象,因此宿主对象可能不会继承Object






----------------------------------------------------------------------------------------------------------------------------------------------------






◆操作符


● 一元操作符


●位操作符(略)                 ----------p39


●布尔操作符  &&,||,!。


......








----------------------------------------------------------------------------------------------------------------------------------------------------








◆语句
● for-in 语句是一种精准的迭代语句,可以用来枚举对象属性。例:
for(var propName in window){
document.write(propName);
}
如果对象是null或undefined,则不执行循环体。








● label语句
例:
var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break outermost;
}
num++;
}
}
alert(num);           //55




var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
continue outermost;
}
num++;
}
}
alert(num);              //95










●with语句:将代码的作用域设置到一个特定对象中。   //不建议使用








●switch语句:
1:可以在switch语句中使用任何数据类型,无论是字符串,还是对象都没有问题
2:每个case值不一定是常量,可以是变量,甚至是表达式。
例:switch("a"+"b"){
case "ab":
.........




switch(true){
case num<0:
.........


注意:switch语句在比较值时使用的是全等操作符,因此不会发生类型转换,10!="10"。






----------------------------------------------------------------------------------------------------------------------------------------------------



◆函数
ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。
在ECMAScript中参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,而不关心数组中包含哪些参数。
如果这个数组中不包含任何元素,无所谓。如果包含多个元素,也没有问题。
在函数体内可以通过arguments对象访问这个参数数组



● arguments对象
arguments对象只是与数组类似(它并不是array实例),因为可以使用[]来访问它的每一个元素例:arguments[0];


* arguments.length 属性可以确定传进来了多少参数。


arguments的值始终与命名参数的值保持一致,但它们的内存空间是相对独立的。它们的值会同步。
没有传递值的命名参数会被赋值为undefined






function test(a,b){
arguments[1]=10;
alert(b);
}
test(1,2);        //10




function test(a,b){
arguments[1]=10;
alert(b);
}
test(1);         //undefined






●没有重载
ECMAScript函数不能实现重载,如果有两个名字相同的函数,则该名字属于后面定义的函数。

































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值