JavaScript高级程序设计(3)

一、
1、语法:区分大小写;命名:第一字符必须为字母,_,$;驼峰:firstSecond,doSomethingImportant……;不用关键字。
2、关键字:break,else,new,var,case,finally,return,void,catch,for,switch,while,continue,function,this,with,default,if,throw,delete,in,try,do,instanceof,typeof。
3、变量:定义变量时不用var时默认为全局变量。
4、数据类型:typeof操作符:undefined:未定义;boolean:布尔值;string:字符串;number:数值;null:空值;object:对象或null(表示一个空对象指针);function:函数。(未声明的变量只能使用typeof操作符检测其数据类型 这一操作,都是undefined),undefined派生自null,故undefined==null
Boolean类型:只有两个值(true或false),与1、0不一样,任何类型值都可以转换为Boolean,调用转型函数Blliean();返回时true或false取决于转换值的数据类型及其实际值(有其规则)。会自动转换。
Number类型:八进制:0+…(0-7);十六进制:0x+…(0-9,A-F)。不要测试某个特定的浮点数值。
数值范围:[5e-324,1.7976931348623157e+308],超出范围时转换成-Infinity(负无穷),Infinity(正无穷)。
涉及一个函数,isFinite()函数,在参数位于最大和最小之间时返回true.
NaN(非数值):如某个数除以0,返回NaN,NaN与任何值不等包括自己,涉及一个函数,isNaN()函数,参数如果不能转换成数值则返回false(如NaN,blue),否则返回true(如“10”,true(转换为1))。
数值转换:Number()函数:

var num1=Number(“Hello world!”);//NaN
var num2=Number(“ ”);//0
var num3=Number(“00011”);//11
var num4=Number(true);//1
var num5=Number(“7.5”);//7.5
var num6=Number(“oxF”);//15
var num7=Number(“null”);//0
var num8=Number(“undefined”);//NaN

parseInt()函数:处理整数,忽略空格直到找到第一个非空格字符,若第一个空格不是数字字符或负号,返回NaN。

var num2=parseInt(“1234blue”);//1234
var num2=parseInt(“ “);//NaN
var num2=parseInt(“0xA“);//10
var num2=parseInt(“22.5“);//22
var num2=parseInt(“070“);//56
var num2=parseInt(“70“);//70
var num2=parseInt(“AF“,16);//175
var num2=parseInt(“AF“);//NaN
var num2=parseInt(“10“,2);//2

parseFloat()函数:忽略前导的零,字符串中第一个小数点有效,只解析十进制值,没有第二个参数指定基数用法,十六进制字符串转换为0,如果字符串包含一个可解析为整数的数(没有小数点,或小数点后都是零),返回整数。

var num=parseFloat(“0056”);//56
var num=parseFloat(“22.34.5”);//22.34
var num=parseFloat(“56.00”);//56
var num=parseFloat(“3.125e7”);//31250000
var num=parseFloat(“oxA”);//0

String类型:
转义序列(字符字面量):\n换行;\t指表;\b空格;\r回车;\f进纸;\斜杠;\’单引号;\”双引号,转义字符表示一个字符。Alert(text.length);//输出28
toString方法:数值、布尔值、对象和字符串值(除null,undefined)都有这个方法。

var age=11,found=true;
var ageAsString=age.toString;//字符串“11”
var foundAsString=found.toString;//字符串“true”

参数可以是基数:

var num=10;
alert(num.toString()); //”10”
alert(num.toString(2)); //”1010”
alert(num.toString(8)); //”12”
alert(num.toString(10)); //”10”
alert(num.toString(16)); //”a”

在不知道是不是null或undefined情况下用String():
有toString()方法调用该方法(没有参数)并返回相应的结果,null则返回null,undefined则返回undefined。

var value1=10var value2=truevar value3=nullvar value4;
alert(String(value1));//”10” 数值,与toString一样结果
alert(String(value2));//”true” 布尔值,与toString一样结果
alert(String(value3));//”null”
alert(String(value4));//”undefined”

!!!Object类型:
Constructor:保存着用于创建当前对象的函数
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。(如o.hasOwnProperty(“name”),参数是字符串形式)
isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,参数是字符串形式。
toString():返回对象的字符串表示
valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法返回值相同。
5、操作符
一元操作符:只能操作一个值的操作符
递增和递减操作符:前置则值在语句前改变,后置则值在语句后改变
前置:递增++age(同age=age+1),递减–age(同age=age-1)

var age=29;
anage=--age+2;
alert(age);//28
alert(anage);//30

后置:递增age++(同age=age+1),递减age–(同age=age-1)

var age=29;
anage=age--+2;
alert(age);//28
alert(anage);//31

4个操作符在不同类型值有不同规则。

var s1=”2”,s2=”z”,b=false,f=1.1;
var o={
valueOf:function(){
return -1;
}
};
s1++;//值变成3
s2++;//值变成NaN
b++;//值变成1
f++;//值变成0.10000000000000009(由于浮点舍入错误所致)
o++;//值变成-2

一元加和减操作符:

var s1=”01”;
var s2=”1.1”;
var s3=”z”;
var b=false;
var f=1.1;
var o={
valueOf:function(){
return -1;
}
};
s1=+s1;//值变成1
s2=+s2;//值变成1.1
s3=+s3;//值变成NaN
b=+b;//值变成0
f=+f;//不变,为1.1
o=+o;//值变成-1

用于表示负值:

var s1=”01”;
var s2=”1.1”;
var s3=”z”;
var b=false;
var f=1.1;
var o={
valueOf:function(){
return -1;
}
};
s1=+s1;//值变成-1
s2=+s2;//值变成-1.1
s3=+s3;//值变成NaN
b=+b;//值变成0
f=+f;//值变成-1.1
o=+o;//值变成1

位操作符:
前31位用于表示整数的值,第32位表示符号(符号位),0表正数,1表负数。
负数(格式二进制补码):如-18,先求18的二进制码(00000000000000000000000000010010),再求二进制反码,1替换0,0替换1(11111111111111111111111111101101),得到的反码+1(11111111111111111111111111101110)。

var num=-18;
alert(num.toString(2));//”-10010”

无符号的32位不再表示符号,无符号整数可以更大。
按位非(~):~num=-num-1;是最底层执行操作,速度更快。
按位与(&):1&1=1,1&0=0,0&1=0,0&0=0;25&3=11001&00011=00001=1
按位或(|):1|1=1,1|0=1,0|1=1,0|0=0;25|3=11001|00011=11011=27
按位异或(^):1^1=0,1^0=1,0^1=1,0^0=0;25^3=11001^00011=11010=26(比按位或小1)
左移(<<):向左移后的空格以0填充,不会影响符号位。
var old=2;//二进制的10
var new=old<<5;//二进制的10000000
alert(new);//64
有符号的右移(>>):保留符号位,符号位不动,其他向右移,多出空格用跟符号一样的数字填充
var old=64;//二进制的1000000
var new=old>>5;//二进制的10000000
alert(new);//2
无符号的右移(>>>):32位都向右移,正数:结果同有符号右移。
负数:都用0填充,正数符号不变,负数不一样

var old=-64//二进制11111111111111111111111111000000
var new=old>>>5//二进制00000111111111111111111111111110,十进制134217726

布尔操作符:
逻辑非(!):返回布尔值。如果用!!(双重否定)相当Boolean()函数。
对象,非空字符串,非0数值(包括Infinity)返回false;
空字符串,数值0,null,NaN,undefined返回true。
逻辑与(&&):布尔值:同时true才返回true(短路操作符)
其他:有一个null,undefined,NaN,返回null,undefined,NaN。
只要第一个为对象返回第二个操作数,若只有第二个为对象当第一个为true才返回第一操作数。
当第一个为false,不会再执行&&,第二个未声明也不会出错,结果为false,但第一个为true时,出错。
逻辑或(||):布尔值:有一true返回true
其他:有一个null,undefined,NaN,返回null,undefined,NaN。
只要第一个为对象返回第二个操作数,若只有第一个为对象当第一个为false才返回第二操作数。
当第一个为true,不会再执行||,第二个未声明也不会出错,结果为true,但第一个为false时,出错。
利用逻辑或避免为变量赋null或undefined值:

var my=pre||back;//当pre为nullundefined,my被赋值为back的值。

乘性操作符:
乘法(*):
超过范围时返回Infinity或-Infinity,
有一个是NaN返回NaN,
Infinity与0相乘返回NaN,
Infinity与非0数值相乘返回Infinity或-Infinity,
取决于有符号操作数的符号,
Infinity与Infinity相乘返回Infinity,
不是数值时在后台调用Number()转换为数值
除法(/):
超过范围时返回Infinity或-Infinity,
有一个是NaN返回NaN,
Infinity被非0数值除返回Infinity或-Infinity,取决于有符号操作数的符号,
Infinity被Infinity除返回Infinity,
Infinity被任意数除返回Infinity,
0/0返回NaN,
非0的有限数被0除,结果为Infinity或-Infinity,取决于有符号操作数的符号,
不是数值时在后台调用Number()转换为数值
求模(%):
无穷%有限,有限%0,Infinity%Infinity——NaN,
有限(a)%无穷:a,
不是数值时在后台调用Number()转换为数值
加性操作符:
加法:
数值:有一个是NaN结果NaN,
Infinity加Infinity返回Infinity,
-Infinity加-Infinity返回-Infinity,
Infinity加-Infinity返回NaN,
+0加+0结果+0,-0加-0结果-0,+0加-0结果+0
字符串:两个都是拼接,一个不是转换为字符串
对象,布尔值,数值:toString()函数
Null,undefined:String()函数
Var str1=5+5;//10
Var str2=5+”5”;//”55”
Var num1=5;var num2=10;
Var message=”the sum of 5 and 10 is “+num1+num2; //the sum of 5 and 10 is 510(顺序,优先级)
Var message=”the sum of 5 and 10 is “+(num1+num2); //the sum of 5 and 10 is 15
减法:
数值:有一个是NaN结果NaN,
Infinity减Infinity返回NaN,
-Infinity减-Infinity返回NaN,
Infinity减-Infinity返回Infinity,
-Infinity减Infinity返回-Infinity,
+0减+0结果+0,-0减-0结果+0,+0减-0结果-0
字符串,布尔值,数值:Number()函数
对象:valueOf()函数/toString()函数再Number()函数
关系操作符:
字符串:字符编码值,数值转换,布尔值转换,对象:valueOf()函数/toString()函数再Number()函数

var re=”Brick”<”alphabet”;//true
var re=”Brick”.toLowerCase()<”alphabet”.toLowerCase();//false
var re=”23”<”3”;//true,”2”为50,”3”为51
var re=”23”<3;//false,”23”为23
var re=”a”<3;//false,”a”为NaN
var re1=NaN<3;//false
vae re2=NaN>=3;//false

相等操作符:
相等和不相等(==、!=):通过类型转换后比较
false:”NaN”==NaN;NaN==NaN;true==2;undefine==0;null==0;
ture:null==undefined;NaN!=NaN;flase==0;true==1;”5”==5;
全等和不全等(===、!==):类型,数值都相等,保证代码数据类型的完整性

var result1=(“55”==55);//true
var result1=(“55”===55);//false

条件操作符:

variable=boolean_expression?true_value:false_value;
Var max=(num1>num2)?num1:num2;//取最大值

赋值操作符:简化赋值操作
=,*=(乘/赋值),/=(除/赋值),%=(模/赋值),+=(加/赋值),-=(减/赋值),<<=(左移/赋值),>>=(有符号右移/赋值),>>>=(无符号右移/赋值)
逗号操作符:

var a=1,b=2,c=”d”;   
var num=(3,4,6,0,7);//num==7,返回最后一个

6、语句:
If语句
do-while语句(while后加“;”)
While语句
for语句
for-in语句(迭代语句,枚举对象的属性)
通式:for(property in expression)statement

forvar propName in window){
document.write(propName);
document.wire(“<br/>”);
}//显示window对象所有属性,每执行一次有一个属性赋值给propName(输出顺序无法预测),直到枚举一遍。

label语句(添加标签,以便将来使用)
通式:label:statement

start:for(var i=0;i<count;i++){
alert(i);
}//定义的start标签可以在break,continue语句引用,一般与for语句配合使用

break和continue语句
Break:退出循环,执行循环后边语句
Continue:退出循环,从循环顶部继续执行
与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语句:将代码左移域设置到一个特定的对象中,简化多次编写同一个对象的工作
通式:with(expression)statement

var qs=location.search.substring(1);
var hostName=location.hostname;
var url=location.href;
with(location){
var qs=search.substring(1);
var hostName=hostname;
var url=href;
}

switch语句:可以是字符串,变量,对象,等等。

switch(expression){
case value:statement
break;
case value:statement
break;
default:statement
}

如果等于value,则执行statement,跳出swicth语句,都不满足时解析default语句
7、函数
return后的代码永远不会执行。
ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终都是这个数组,不关心数组中包含哪些参数,在函数体内可用arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
arguments对象可以与命名参数一起用
没有传递值的命名参数将自动赋予undefined值,跟定义了变量但没初始化一样。
没有重载,后定义的覆盖先定义的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值