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 操作符定义的变量将成为定义该变量的作用域中的局部变量,例如:
错误如下:
错误原因:因为message用var关键字定义,其作用域为function{……},而alert(message)要对message进行RHS,没有在全局作用域中找到其相应的值,所以会出现如上错误。
而下面的代码就不会出现上面的错误:
原因:在调用函数test的时候,由于需要对message进行LHS,作用域中并没有定义message变量,所以会在全局作用域中定义一个message变量,这样的在执行alert(messsage)的时候就可以再全局作用域中找到一个message变量,它的值为hi。(关于LHS与RHS的具体内容可以参考我的另外一篇博客)
十、数据类型--五种简单数据类型(基本数据类型)
typeof操作符:用来检测变量的类型
Undefined类型:Undefined 类型只有一个值,即特殊的 undefined,只定义未初始化的变量的值默认为undefined,例如:
p.s 定义未初始化的变量与未定义的变量使用typeof的结果同样都是undefined,但二者原理是不一样的,最好是显示的初始化变量,这样当返回值为undefined时,我们就可以确定该变量是没有被声明,而不是没有初始化
2.Null类型:只有一个值,就是null。null值表示一个空对象指针,使用typeof操作符时返回的值是object
p.s undefined 值是派生自 null 值的,alert(null == undefined); //true
3.Boolean类型:有两个值:true和false
Boolean():将一个值转换为其对应的Boolean值得函数,转换过程如下:
4.Number类型:表示整数与浮点数
整数:默认为十进制,也可以表示八进制和十六进制
浮点数:
数值范围:
最小值: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()方法,再测试返回值。
数值转换:有三个函数可以把非数值转换为数值: 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()函数中,第一个小数点有效。例如:
parseFloat()始终都会忽略前导的零,而parseInt()可以识别出八进制与十六进制,还可以有第二个参数,用于标志用哪种进制进行解析,例如:
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属性确定传递进来多少个参数
第二个参数num2改成10,num2与arguments[1]访问的不是同一处的存储空间,但二者的值会保持同步。
ECMAScript所有参数传递的都是值,没有引用传递
没有重载,因为有arguments,不算做有真正的函数签名
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的值 |
Boolean | true | false |
String | 任何非空字符 | "" |
Number | 任何非零数字值(包括无穷大) | 0和NaN(参见本章后面有关NaN的内容) |
Object | 任何对象 | null |
Undefined | undefined |
整数:默认为十进制,也可以表示八进制和十六进制
浮点数:
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,不算做有真正的函数签名
相关文章推荐
- 关于JavaScript作用域你想知道的一切
- ExtJs 入门教程
- canvas导出为图片并用JS下载
- js实现开灯关灯效果
- java调用javascript :js引擎rhino
- JSP点击事件大全
- 【js】小数保留n位小数
- js插件开发的一些感想和心得
- 关于JavaScript作用域你想知道的一切
- 分享我对JS插件开发的一些感想和心得
- JS获取时间的相关函数及时间戳与时间日期之间的转换
- js的匿名函数
- JavaScript中的作用域和闭包浅谈
- DOM的高级操作——表单的添加/删除/获取
- MVC in Javascript
- WebAPI接收JSON参数注意事项
- Nokitjs 系列-01 - HelloWorld
- JavaScript基础精华01(变量,语法,数据类型)
- JavaScript基础精华01(变量,语法,数据类型)
- DOM的应用