javascript高级程序设计知识整理(1)

一、文档模式

最初的两种文档模式是:混杂模式标准模式

这两种模式主要影响css内容的呈现,但在某些情况下也会影响到JavaScript的解释执行。

如果在文档开始处没有文档类型声明,所有浏览器都会默认开启混杂模式。在这种模式下,不同浏览器的行为差异非常大。

严格模式:

1.要在整个脚本中启用严格模式,可以在顶部添加如下代码:

"use strict";

这是一个编译指示,用于告诉支持的JavaScript引擎切换到严格模式。

2.要指定某个函数在严格模式下执行:

function doSomething(){//将编译指示写在函数内部上方

   "use strict";

   //函数体

}

二、语法

1.标识符

命名规则:

(1)第一个字符必须是一个字母下划线(_)美元符号($)

(2)其他字符可以是字母、下划线(_)、美元符号($)或数字

最佳实践:驼峰命名法

2.变量

使用var操作符定义的变量,将成为定义该变量的作用域中的局部变量。

例如:

function test(){

   var message="hi";//局部变量

}

test();

alert(message);//错误,因为message在函数调用后即被销毁

而,如果省略var操作符,创建的就是全局变量

例如:

function test(){

   message="hi";//全局变量

}

test();

alert(message);//"hi"

因为message是全局变量,所以,只要调用过一次test()函数,这个变量就有了定义,就可以在函数外部的任何地方被访问到。

注意:这种定义全局变量的方法不推荐。

3.数据类型

5种基本数据类型:Number,String,Boolean,Null,Undefined

1种复杂数据类型:Object

(1)typeof操作符

typeof的作用是,用来检测指定变量的数据类型。

对一个值使用typeof操作符可能返回下列某个字符串:

"number"--如果这个值是数值

"string"--如果这个值是字符串

"boolean"--如果这个值是布尔值

"undefined"--如果这个值没有定义

"object"--如果这个值是对象或null

"function"--如果这个值是函数

用法举例:

var message="something";

alert(typeof message);//"string"

alert(typeof(message));//"string"

alert(typeof 95);//"number"

注意:typeof是一个操作符,而不是一个函数。因此,例子中的括号尽管可以使用,但不是必须的。

另:对于尚未声明的变量,只能执行一项操作,就是用typeof检测其数据类型,这时,返回的是"undefined"。

(2)Boolean类型

要将一个值转化为Boolean值,可以调用转型函数Boolean(),这里转换的规则有几点特殊的,要注意:

Number->Boolean:任何非0数字值-->true,0和NaN-->false

Undefined->:不能转化为true,undefined-->false

(3)Number类型

a.关于NaN

特点:

第一,任何涉及NaN的操作,都会返回NaN。

第二,NaN与任何值都不相等,包括NaN本身。

isNaN()函数:

isNaN()在接收到一个数值后,会尝试将这个值转化为数值。如果可以转化,也就认为,传入的值是一个数字,这时,isNaN()会返回false。

说明:isNaN()也适用于对象。在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转化为数值。如果不能, 则基于这个返回值,再调用toString()方法,再测试返回值。

b.数值转换(Number(),parseInt(),parseFloat())

Number()用于任何数据类型

parseInt(),parseFloat()用于字符串->数值

转化规则中一些要注意的地方:

Number():

Number(undefined)-->NaN

Number(null)-->0

Number("00111")-->111 //这里会忽略前导0!

Number("0xf")-->15 //16进制会转化为对应的十进制数值

Number("")-->0

注意:Number()在转换字符串时,如果字符串中不是只包含数字,则会返回NaN,无法进行转换

parseInt():

parseInt()会对传入的值进行从前到后的扫描,直到找到第一个非空字符,如果这第一个非空字符不是数字或负号,parseInt()就会返回NaN,如果未找到非空字符,同样返回NaN。找到第一个非空字符后,继续向后扫描,直到遇到非数字字符,就会停止扫描,然后返回已经扫描到的数值。

parseInt("1234blue")-->1234

parseInt("")-->NaN

parseInt(22.5)-->22

parseInt("070")-->56 //这里不忽略前导0,因此,将070视为八进制数值解析,并转化为对应十进制

parseInt()可以拥有第二个参数,用来指定第一个参数是几进制,也就是,要按照几进制来解析第一个参数(最终都解析为十进制)

例如:

parseInt("10",2);//2

parseInt("10",8);//8

parseInt("10",10);//10

parseInt("10",16);//16

parseFloat():

解析规则类似于parseInt()。这里注意,解析过程中遇到的第一个小数点是有效字符,第二个则是无效字符,遇到后,不再继续解析。

特点:

parseFloat()始终忽略前导0

parseFloat()只解析十进制值,因此,它不可以传入第二个参数,对十六进制格式的字符串,会解析为0(可以理解为,解析到0x中的0后,遇到x这个非数字的值,就不再继续解析了,所以返回0)。

parseFloat()转换后,得到的数值会忽略小数点后的0,也就是说,返回的不会是2.0,而是2。

(4)String类型

toString()方法:可用于数值、布尔值、对象和字符串。不可用于null和undefined。

toString()方法可以传递一个参数,用来指示,返回的字符串以哪种进制的格式表示,例如:

var num=10;

alert(num.toString()); //"10"

alert(num.toString(2)); //"1010"

alert(num.toString(8)); //"12"

alert(num.toString(16)); //"a"

String()可用于任何类型。它的转换规则是:

如果传入的值有toString()方法,则调用。

如果传入的是null,则返回"null"。

如果传入的是undefined,则返回"undefined"。

4.操作符

(1)++和--

++和--不仅仅适用于数值,还可用于字符串、布尔值、对象。

非数值的值执行++和--时,先将自己转换为数值,这里对字符串的转换规则,类似于parseInt()。如果不能转换,则转换为NaN,然后自增或自减。

(2)一元+和-操作符

一元+放在数值前面,对数值不会产生影响。例如:

var num=25;

num = +num;//仍然是25 注意:=+不是+=!后者数值会加1

一元-同样不改变数值的大小,相当于取了原来值得相反数。

同++和--,也可以用于数值以外的其他类型。

非数值的值执行+和-时,先将自己转换为数值,这里的转换规则和Number()函数的规则相同。

(3)位操作符--注意:按位非(~)相当于操作数的负值减1

另:几种位操作符的表示方法--按位与:&,按位或:|,按位异或:^

关于移位操作:

左移(<<):不影响操作数的符号位,即:移位时不移动符号位,移动的是符号位后的数值位(相当于乘2的n次方)

右移:

有符号右移(>>):右移后的空位,用符号位填充(相当于除2的n次方)

无符号右移(>>>):右移后的空位,用0填充。正数,结果与>>相同。负数:由于负数的二进制,等于该负数的绝对值的二进制、的补码,而无符号右移,会把这个二进制数当做正数的二进制去移位,因此,移位后的数值不能用简单的乘除法等价。

(4)布尔操作符(逻辑与、或、非(短路操作符)--&&,||,!)

(5)乘性操作符:

a.乘法

var result=a*b;

特殊情况:

如果有一个是NaN,结果是NaN

Infinity*0-->NaN

Infinity*非0数-->Infinity/-Infinity

Infinity*Infinity-->Infinity

如果有一个不是数值,后台调用Number()将其转化为数值,再应用上述规则

b.除法

var result=a/b;

特殊情况:

如果有一个是NaN,结果是NaN

Infinity/Infinity-->NaN

0/0-->NaN

非0的有限数/0-->Infinity/-Infinity

如果有一个不是数值,后台调用Number()将其转化为数值,再应用上述规则

c.求模

var result=a%b;

特殊情况:

Infinity(-Infinity)%有限数值-->NaN

有限数值%0-->NaN

Infinity%Infinity-->NaN

有限数值a%Infinity(-Infinity)-->有限数值a

0%任意值-->0

如果有一个不是数值,后台调用Number()将其转化为数值,再应用上述规则

(6)加性操作符

a.加法

var result=a+b;

如果有一个是NaN,结果是NaN

Infinity+Infinity-->Infinity

-Infinity+(-Infinity)-->-Infinity

Infinity+(-Infinity)-->NaN

+0+(+0)-->+0

-0+(-0)-->-0

+0+(-0)-->+0

如果有一个操作数是字符串,将另一个转化为字符串,然后将二者拼接

如果两个操作数都是字符串,直接将二者拼接

b.减法

var result=a-b;

如果有一个是NaN,结果是NaN

Infinity-Infinity-->NaN

-Infinity-(-Infinity)-->NaN

Infinity-(-Infinity)-->Infinity

-Infinity-Infinity-->-Infinity

+0-(+0)-->+0

+0-(-0)-->-0

-0-(-0)-->+0

如果有一个操作数是字符串、布尔值、null或undefined,则先在后台调用Number()函数将其转换为数值,然后根据上述规则计算。

如果有一个操作数是对象,调用对象的valueOf()方法取得表示该对象的数值,如果对象没有valueOf()方法,调用其toString()方法并将得到的字符串转化为数值。

(7)关系操作符(>,<,>=,<=)

注意点:

如果有一个操作数是数值,就将另一个操作数转化为数值,再比较

如果有一个操作数是布尔值,先将其转化为数值,再比较

任何操作数与NaN进行关系比较,结果都是false

(8)相等操作符

注意==(!=)与===(!==)的区别

特殊注意:

null==undefined,null!==undefined

5.语句

for-in语句:

精准的迭代语句,可用来枚举对象的属性

例如:

for(property in window){

   document.write(propName);

}

对象的值是null或undefined,for-in语句会抛出错误。使用此语句前,先判断对象是不是null或undefined。

switch语句:

特点:

js里的switch可以使用任何数据类型(其他许多语言中只能使用数值)

每个case的值不一定是常量,可以是变量,甚至是表达式

switch语句比较,使用全等操作符

6.函数

特别注意:函数声明的参数个数,与实际传入的参数个数没有关系!

即,即使声明了两个参数,调用时也可以只传一个,这时,第二个参数会被赋予undefined值,即使没有声明参数,调用时也可以传入参数。

调用函数时传入的参数,都被存放在arguments对象中,且按照调用时的传入顺序存放(即:第一个参数是arguments[0],第二个是arguments[1],以此类推)。arguments类似于数组,但它并不是Array的实例。可以通过下标访问到arguments中存放的值,如:arguments[0]、arguments[1],也可以获得它的长度,arguments.length。

举个特殊的例子:

function doAdd(num1,num2){

   arguments[1]=10; /*这里修改了arguments[1],也就修改了num2,即,此时,num2也等于10

                     *(如果只传递一个参数,在严格模式中,num2此时还是undefined)*/

   alert(arguments[0]+num2);

}

注意:ECMAscript没有重载!但是可以通过,检测传入函数中参数的类型和数量(检测arguments),并作出不同的反应(if-else),模仿重载。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值