javascript第一章--基本概念
2018-06-24 00:48:09来源:未知 阅读 ()
① 语法
一. 区分大小写
1. javascript中的一切(变量、函数名、操作符)都区分大小写,如变量名text和变量名Text代表两个不同的变量。
二. 标识符
1. 标识符指的就是变量名、函数名、属性名、函数的参数,不能把关键词、保留字、true、false、null用作标识符。
2. 它按照下列格式规则:
一、 第一个字符必须是字母、下划线或者($)美元符号;
二、 其他字符可以是字母、下划线、数字或者($)美元符号;
3. 推荐标识符采用驼峰大小写格式,也就是第一个字母小写,后面的单词首字母大写,如: getName、getAge。
三. 注释
注释有两种:
1. 单行注释:
//我是单行注释
2. 块级注释:
/*
*
*我是块级注释
*
*/
四. 严格模式
1. ECMAScript5引入了严格模式的概念,它给javascript定义了一种不同的解析与执行模型,ECMAScript3一些不正确的行为将得到处理。
2. 要在脚本中开启严格模式,在顶部写入如下代码即可:
"use strict";
这行代码是一个编译指示,告诉支持的js引擎切换到严格模式,这是为不破坏ECMAScript3语法而特意选定的语法。
五. 语句
1. javascript中的语句以一个分号结尾,如果省略分号,则由解析器确定语句的结尾。
2. 虽然语句结尾的分号不是必需的,但建议任何时候都不要省略,避免压缩代码时出现错误,增进代码性能。
var c=a+b //即使没有分号也是有效的语句 -- 不推荐
var c=a+b; //有效的语句 -- 推荐
3. 多条语句组合到一个代码块中,代码块以左括号({)开头,以右括号(})结尾。
if (text) {
alert(text);
}
4. 条件控制语句最佳实践是始终在控制语句中使用代码块
if (text)
alert(text); //有效,但容易出错
if (text) {
alert(text); //有效,推荐使用
}
② 关键字和保留字
一. 关键字
ECMA-262描述了一组具有特定用途的关键字,可用于表示控制语句的开始或结束,或者用于执行特定操作等。关键字是语言保留的,不能用于标识符。
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 |
二. 保留字
ECMA-262还描述了另外一组不能作为标识符的保留字,这些保留字还没有特定的用途,但有可能在将来作为关键字。
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
③ 变量
1. javascript中的变量是松散型的,可以用来保存任何类型的数据,每个变量仅仅是一个用来保存值的占位符而已。定义变量要使用var操作符(关键字),后跟变量名(标识符)。
var message
2. 可以使用一条语句定义多个变量,用逗号分隔开。
var message, name, age; //定义了message、name、age3个变量。
3. 这个message变量可以保存任何类型的数据,如果未初始化,保存一个特殊值 -- undefined,也可以直接初始化。
var message = 'dong'
4. var操作符定义的变量将成为定义该变量的作用域的局部变量。
function fn() {
var message = 'dong';
alert(message); //dong
}
fn();
alert(message); //message is not defined
5. 变量也可省略var操作符,那么这个变量是一个全局变量。
function fn() {
message = 'dong';
alert(message); //dong
}
fn();
alert(message); //dong
6. 虽然省略var操作符可以定义全局变量,但不是推荐的做法,因为在全局作用域中定义的全局变量很难维护。
④ 数据类型
javascript有5种简单数据类型,1种复杂数据类型。
简单数据类型: String、 Number、 Null、 Undefined、 Boolean;
复杂数据类型: Object;
一. typeof操作符
鉴于ECMAScript是松散型的,因此需要有一种手段来检测变量的数据类型 -- typeof操作符。
'undefined' -- 值未定义
'boolean' -- 值是布尔值
'string' -- 值是字符串
'number' -- 值是数字
'object' -- 值是对象或者null (null被认为是一个空的对象引用)
'function' -- 值是函数
二. Undefined类型
1. Undefined类型只有一个值,即特殊的undefined。在使用var操作符声明变量,但未初始化,值便是undefined。
var message;
alert(message == undefined); //true
2. 也可以给变量显式的赋值undefined。
var message = undefined;
alert(message == undefined); //true
3. 然而困惑的有一点就是变量是否声明,typeof操作符返回的都是undefined。
var message; //声明
//var age; //未声明
alert(typeof message); //undefined
alert(typeof age); //undefined
三. Null类型
1. Null类型是第二个只有一个值的数据类型,即特殊的null。null值表示一个空对象指针,所以检测null值会返回"object"。
var message = null;
alert(typeof message); //object
2. 如果定义的变量将来会保存对象,那么可以把变量的值初始化为null,这样检查null值就可以知道变量是否保存了一个对象的引用。
if (message != null) {
//对message对象执行操作
}
3. 实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。
alert(null == undefined); //true
4. 对于意在保存对象的变量来说,可以把值初始化为null,从而体现了null作为空对象指针的惯例。而没有必要吧一个变量的值显式地设置为undefined,从而有助于进一步区分null和undefined。
四. Boolean类型
1. Boolean类型只有两个字面值: true和false。和数字值不是一回事,所以true不一定等于1,false不一定等于0。给变量赋Boolean类型值:
var a = true;
var b = false;
2. Boolean类型的字面值true和false是区分大小写的,True和False都不是Boolean值,而是标识符。
3. 虽然Boolean类型只有两个字面值,但ECMA中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()。
var a = 'dong';
var b = Boolean(a);
alert(b); //true
下表给出各种数据类型及其对应的转换规则。
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a① | undefine |
1. 这些转换规则对理解流控制语句自动执行相应的Boolean值转换非常重要。
var message = 'dong';
if (message) { //字符串message被自动转换成了对应的Boolean值(true)。
console.log('value');
}
2. 由于存在这种自动执行的Boolean值转换,因此确切地知道在流控制语句中使用的是什么变量至关重要。
五. Number类型
1. Number类型使用IEEE754格式表示整数和浮点数值,为支持各种数值类型,ECMA-262定义了不同的数值字面量格式。
最基本的数值字面量格式是十进制整数:
var intNum = 1; //整数
整数还可以通过八进制(8位数)的字面值来表示。八进制字面值的第一位必须是0,然后是八进制数字序列(0~7)。如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值分析。
var a = 77; //77
var b = 077; //八进制的63 (7*81+7*80)
var c = 079; //无效的八进制数值79
八进制字面量在严格模式下无效,会导致javascript引擎报错。
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9及A~F)。其中,字母A~F可以大写,也可以小写。
var a = 0xA; //十六进制的10 (10*160)
var b = 0x1f; //十六进制的31 (1*161+15*160)
在进行算术计算时,所有已八进制和十六进制表示的值最终都转换为十进制数值。
六. String类型
1. String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号(")或单引号(')表示
var a = 'hello';
var b = "world";
String类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者既有其它的用途。
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号('),在用单引号表示的字符串中使用。例如: ' I am \'wzd\' ' |
\" | 双引号("),在用双引号表示的字符串中使用。例如: " I am \"wzd\" " |
\xnn | 以十六进制代码nn表示的一个字符(其中n为0~F)。例如: \x41表示"A" |
\unnnn | 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如: \u03a3表示希腊字符 |
七. Object类型
1. ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象。
var a = new Object();
2. 在ECMAScript中,如果不给构造函数传递参数,则可以省略后面的那一对圆括号。(不推荐)
var a = new Object;
3. 仅仅创建Object的实例并没有什么用处,但关键是要理解一个重要的思想:即在ECMAScript中,Object类型是所有它的实例的基础。换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
Object的每个实例都具有下列属性和方法
1. constructor: 保存着用于创建当前对象的函数。对面前面的例子来说,构造函数(constructor)就是Object()。
2. hasOwnProperty(propertyName): 用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如: o.hasOwnproperty("name"))。
3. isPrototypeOf(object): 用于检查传入的对象是否是当前对象的原型。
4. propertyIsEnumerable(propertyName): 用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
5. toLocaleString(): 返回对象的字符串表示,改字符串与执行环境的地区对应。
6. toString(): 返回对象的字符串表示。
7. valueOf(): 返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
⑤ 操作符
ECMA-262描述了一组用于操作数据值的操作符,包括算术操作符、位操作符、关系操作符和相等操作符。
⑥ 语句
一. if语句
if (condition) statement1 else statement2
if (a > 10) {
alert('a大于10');
} else if (a = 10) {
alert('a等于10');
} else {
alert('a小于10');
}
二. do-while语句
do {
statement
}while(expression)
var a = 1;
do{
a++;
}while(a < 10)
三. while语句
while(expression) statement
var a = 1;
while(a < 10) {
a++;
}
四. for语句
for (initialization; expression; post-loop-expression) statement
for (var a = 0; a < 10; a++) {
alert(a);
}
五. for-in语句
for (property in expression) statement
for (var propName in window) {
document.write(propName);
}
六. label语句
label: statement
start: for (var i = 0; i < count; i++) {
alert(i);
}
七. break和continue语句
var num = 0;
for (var i = 1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num++;
}
alert(num); //4
var num = 0;
for (var i = 1; i < 10; i++) {
if (i % 5 == 0) {
continue;
}
num++;
}
alert(num); //8
八. 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;
case value: statement
break;
case value: statement
break;
default: statement
switch (i) {
case 5:
alert('5');
break;
case 15:
alert('15');
break;
case 25:
alert('25');
break;
default:
alert('other');
⑦ 函数
函数对任何语言来说都是一个核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。ECMAScript中的函数使用function关键字来声明,后跟一组参数以及函数体。
function functionName (arg0, arg1, arg2, ...) {
statement
}
function method (name) {
alert("hello" + name);
}
ECMAScript中的函数在定义时不必指定是否返回值。实际上,任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值。
function method (num1, num2) {
return num1 + num2;
}
var result = method(5,10); //15
函数在return语句之后停止并立即退出,位于return语句之后的任何代码都不会被执行。
function method (num1, num2) {
return num1 + num2;
alert('hello'); //不会被执行
}
var result = method(5,10); //15
一. 理解参数
ECMA函数的参数大多数其他语言中函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接受两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。之所以会这样,原因是ECMAScript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组中包含哪些参数。如果这个数组中不包含任何元素,无所谓;如果包含多个元素,也没有问题。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。(第一个参数是arguments[0])
function method () {
alert(arguments.length);
}
method("string", 45); //2
method("string"); //1
method(); //0
注: ECMAScript中的所有参数传递的都是值,不肯能通过引用传递参数。
arguments的值永远与对应的命名参数保持同步。
arguments[0]获取第一个参数,arguments.length获取传入参数个数。
如果函数只传入一个参数,那么arguments[1]设置的值不会反映到命名参数上。因为arguments对象的长度是由传入的参数个数决定的,而不是定义函数的命名参数个数决定的。
function fn (a,b) {
arguments[1] = 10;
alert(arguments.[1]); //10
}
fn(1,2);
function fn (a,b) {
arguments[1] = 10;
alert(arguments.[1]); //undefined
}
fn(1);
二. 没有重载
ECMAScript函数不能像传统意义上那样实现重载。而在其他语言中(如java)中,可以为一个函数编写两个定义,只要这两个定义的签名(接受的参数的类型和数量)不同即可。如前所述,ECMAScript函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的。 如果定义了两个名字相同的函数,则该名字只属于后定义的函数。
function method (num) {
return num + 10;
}
function method (num) {
return num + 20;
}
var result = method(10); //30
函数method()被定义了两次,第一个函数给参数加10,而第二个函数给参数加20。由于后定义的函数覆盖了先定义的函数,因此调用函数时,返回的结果是30。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- javascript面向对象入门基础详细介绍 2020-03-29
- JavaScript函数表达式详解及实例 2020-03-25
- 如何用javascript连接access数据库 2020-03-20
- js中去掉字串左右空格 2020-03-20
- Javascript中的经典技巧 2020-03-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash