您的位置:首页 > Web前端 > JavaScript

JavaScript高级程序设计学习笔记第三章--基本概念

2016-02-04 09:25 701 查看
一、标识符:

1.区分大小写

2.命名规则:

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

其他字符可以是字母、下划线、美元符号或数字

标识符中的字母也可以包含扩展的 ASCII 或 Unicode 字母字符(如 À 和 Æ) ,但不推荐这样做。

不能把关键字、保留字、true、false和null用作标识符

3.书写方式:最好按照驼峰大小写格式书写,就是第一个字母小写,剩下的每个单词的首字母大写,但不强制这么做
二、注释(两种方式)

单行注释://

多行注释:/*……*/

三、严格模式:“use strict”,一个编译指示,用于告诉JavaScript编译器切换到严格模式

四、语句:

语句后的;可以省略,但不推荐

建议使用代码块,即使只有一条语句

五、关键字:break、do、instanceof、typeof、case、else、new、var、catch、finally、return、void、continue、for、switch、while、debugger*(第五版新增) function、this、with、default、if、throw、delete、in、try

六、保留字:abstract、enum、int、short、boolean、 export、nterface 、static、byte、 extends、long、 supe、char、 final、 native、 synchronized、class、 float、package、 throws、const 、goto、 private、 transient、debugger、 implements、protected、volatiledouble、import、 public、let、yield(第五版新增)

七、关键字与保留字不要作为标识符,最好的命名是有意义的命名,能够明确知道其代表的含义

八、变量:

占位符,可以保存任何类型数据

定义变量:使用var关键字,例如var message;,定义了一个message变量,使用 var 声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;在 with 语句中,最接近的环境是函数环境。如果初始化变量时没有使用 var 声明,该变量会自动被添加到全局环境。

初始化变量:message="hi";

九、定义并初始化变量的两种方式:

var message="hi";//包含两步,定义变量var message;初始化变量message="hi";

var message;message="hi";

定义并初始化多个变量:var message = "hi",found = false,age = 29;

p.s 即用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量,例如:

function test(){
var message = "hi"; // 局部变量
}
test();
alert(message); // 错误!


错误如下:



错误原因:因为message用var关键字定义,其作用域为function{……},而alert(message)要对message进行RHS,没有在全局作用域中找到其相应的值,所以会出现如上错误。

而下面的代码就不会出现上面的错误:

function test(){
message = "hi"; // 全局变量
}
test();
alert(message); // "hi"


原因:在调用函数test的时候,由于需要对message进行LHS,作用域中并没有定义message变量,所以会在全局作用域中定义一个message变量,这样的在执行alert(messsage)的时候就可以再全局作用域中找到一个message变量,它的值为hi。(关于LHS与RHS的具体内容可以参考我的另外一篇博客)

十、数据类型--五种简单数据类型(基本数据类型)

typeof操作符:用来检测变量的类型

Undefined类型:Undefined 类型只有一个值,即特殊的 undefined,只定义未初始化的变量的值默认为undefined,例如:

var message;
alert(message == undefined); //true

var message = undefined;
alert(message == undefined); //true


p.s 定义未初始化的变量与未定义的变量使用typeof的结果同样都是undefined,但二者原理是不一样的,最好是显示的初始化变量,这样当返回值为undefined时,我们就可以确定该变量是没有被声明,而不是没有初始化

var message; // 这个变量声明之后默认取得了 undefined 值
// 下面这个变量并没有声明
// var age
alert(message); // "undefined"
alert(age); // 产生错误
alert(typeof message); // "undefined"
alert(typeof age); // "undefined


2.Null类型:只有一个值,就是null。null值表示一个空对象指针,使用typeof操作符时返回的值是object

p.s undefined 值是派生自 null 值的,alert(null == undefined); //true

3.Boolean类型:有两个值:true和false

Boolean():将一个值转换为其对应的Boolean值得函数,转换过程如下:

var message = "Hello world!";
var messageAsBoolean = Boolean(message);//true


数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符""
Number任何非零数字值(包括无穷大)0和NaN(参见本章后面有关NaN的内容)
Object任何对象null
Undefinedundefined
4.Number类型:表示整数与浮点数

整数:默认为十进制,也可以表示八进制和十六进制

浮点数:

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1;//不推荐
var floatNum4 = 1.; // 小数点后面没有数字——解析为 1
var floatNum5 = 10.0; // 整数——解析为 10
var floatNum6 = 3.125e7; // 等于 31250000


数值范围:

最小值:Number.MIN_VALUE

最大值:Number.MAX_VALUE

超过范围时,将会转换为Infinity与-Infinity,不能用于进行计算

isFinite()函数:用于检测是否在最大值与最小值之间

NaN:非数值(Not a Number)是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
特点:

任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN

NaN 与任何值都不相等,包括 NaN 本身,如alert(NaN == NaN); //false

isNaN()函数:确定函数参数是否“不是数值”,如果不是数值返回true,是数值返回false。这个函数其实还很容易混淆的。运用这个函数还需要对参数进行类型转换。isNaN()确实也适用于对象。在基于对象调用 isNaN()函数时,会首先调用对象的 valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用 toString()方法,再测试返回值。

alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN(true)); //false(可以被转换成数值 1)


数值转换:有三个函数可以把非数值转换为数值: Number()、 parseInt()和 parseFloat()

Number():可以用于任何数据类型,转换规则:

如果是 Boolean 值, true 和 false 将分别被转换为 1 和 0。

如果是数字值,只是简单的传入和返回。

如果是 null 值,返回 0。

如果是 undefined,返回 NaN。

如果是字符串,遵循下列规则:

如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成 1, "123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了,八进制不能这样正常转化为十进制);

如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);

如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;

如果字符串是空的(不包含任何字符),则将其转换为 0;

如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。

如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。

parseInt()函数:从第一个字符(位置 0)开始解析每个字符。会忽略字符串前面的空格,直至找到第一个非空格字符(遇到空字符串会返回NaN)

如果第一个字符不是数字字符或者负号, parseInt()就会返回 NaN

如果第一个字符是数字字符, parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符

parseFloat()函数:从第一个字符(位置 0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。

parseInt()与parseFloat()函数的区别:

在parseInt()函数中,第一个小数点无效,在parseFloat()函数中,第一个小数点有效。例如:

var num4 = parseInt(22.5); // 22
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34


parseFloat()始终都会忽略前导的零,而parseInt()可以识别出八进制与十六进制,还可以有第二个参数,用于标志用哪种进制进行解析,例如:

var num5 = parseInt("070"); // 56(八进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)
var num2 = parseFloat("0xA"); //0
var num5 = parseFloat("0908.5"); //908.5


5.String类型:表示由零或多个 16 位 Unicode 字符组成的字符序列.

使用""或者''都可以。

特殊字面量需要用转义字符\

字符串的不可变性

转换为字符串的方法:toString()函数和String()函数。

toString()可以传递一个参数:基数.

null和undefined没有toString()方法,有String()方法。

6.Object类型:

创建对象的方法:var o=new object();或者var o={};

每个对象都具有的属性与方法:

constructor:保存着用于创建当前对象的函数。

hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。

isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型

propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句来枚举。

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

toString():返回对象的字符串表示。

valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同。

7.操作符:

++,--,分为前置与后置

+,-:二者放在数值前面不会产生变化,放在非数值前面,则会先按照Number()函数的转换规则,+不会产生变换,-会变成负数

位操作符:左移>>,右移<<

布尔操作符:逻辑非(!),逻辑与(&&),逻辑或(||)

乘性操作符:*

除法:/

取余:%

加法与减法:+,-

关系操作符:<=,>=,<,>

相等操作符:==(类型转换),===(类型不转换)

条件操作符:?:

逗号操作符:",",用于声明多个变量,也可以用于赋值,赋值的话会返回表达式的最后一个值

8.语句:

if

do-while

while

for(;;):三个表达式都是可选的

for in

label

break与continue

with

switch

9.函数:

function关键字定义

return语句后面的语句都不会被执行

函数可以通过arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。

arguments并不是Array的实例,只是与数组类似,可以通过方括号语法来访问属性值,通过length属性确定传递进来多少个参数

function doAdd(num1, num2) {
arguments[1] = 10;
alert(arguments[0] + num2);
}


第二个参数num2改成10,num2与arguments[1]访问的不是同一处的存储空间,但二者的值会保持同步。

ECMAScript所有参数传递的都是值,没有引用传递

没有重载,因为有arguments,不算做有真正的函数签名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: