当前位置:首页 > 系列课程 > JS高级设计 > 正文内容

3、第三章--JavaScript基本概念(语句、函数、小结)

binadmin2020-06-26JS高级设计24

3.6 语句
ECMA-262 规定了一组语句(也称为流控制语句)。从本质上看,语句定义了 ECMAScript 中的主要语法,语句通常使用一或多个关键字来完成给定任务。语句可以很简单,例如通知函数退出;也可以比较复杂,例如指定重复执行某个命令的次数。
3.6.1 if语句
大多数编程语言中最为常用的一个语句就是 if 语句。以下是 if 语句的语法:

if (condition) statement1 else statement2


其中的 condition(条件)可以是任意表达式;而且对这个表达式求值的结果不一定是布尔值。ECMAScript 会自动调用 Boolean()转换函数将这个表达式的结果转换为一个布尔值。如果对 condition求值的结果是 true,则执行 statement1(语句 1),如果对 condition求值的结果是 false,则执行 statement2(语句 2)。而且这两个语句既可以是一行代码,也可以是一个代码块(以一对花括号括起来的多行代码)。
请看下面的例子。

if (i > 25) 
 alert("Greater than 25."); // 单行语句
else { 
 alert("Less than or equal to 25."); // 代码块中的语句
}


不过,业界普遍推崇的最佳实践是始终使用代码块,即使要执行的只有一行代码。因为这样可以消除人们的误解,否则可能让人分不清在不同条件下要执行哪些语句。另外,也可以像下面这样把整个 if 语句写在一行代码中:

if (condition1) statement1 else if (condition2) statement2 else statement3


但我们推荐的做法则是像下面这样:

if (i > 25) { 
 alert("Greater than 25."); 
} else if (i < 0) { 
 alert("Less than 0."); 
} else { 
 alert("Between 0 and 25, inclusive."); 
}


3.6.2 do-while语句
do-while 语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件。换句话说,在对条件表达式求值之前,循环体内的代码至少会被执行一次。以下是 do-while 语句的
语法:

do { 
 statement 
} while (expression);

 
下面是一个示例:

var i = 0; 
do { 
 i += 2; 
} while (i < 10); 
alert(i);


在这个例子中,只要变量 i 的值小于 10,循环就会一直继续下去。而且变量 i 的值最初为 0,每次循环都会递增 2。像 do-while 这种后测试循环语句最常用于循环体中的代码至少要被执行一次的情形。
3.6.3 while语句
while 语句属于前测试循环语句,也就是说,在循环体内的代码被执行之前,就会对出口条件求值。因此,循环体内的代码有可能永远不会被执行。以下是 while 语句的语法:

while(expression) statement


下面是一个示例:

var i = 0; 
while (i < 10) { 
 i += 2; 
}


在这个例子中,变量 i 开始时的值为 0,每次循环都会递增 2。而只要 i 的值小于 10,循环就会继续下去。
3.6.4 for语句
for 语句也是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力。以下是 for 语句的语法:

for (initialization; expression; post-loop-expression) statement


下面是一个示例:

var count = 10; 
for (var i = 0; i < count; i++){ 
 alert(i); 
}


以上代码定义了变量 i 的初始值为 0。只有当条件表达式(i<count)返回 true 的情况下才会进入 for 循环,因此也有可能不会执行循环体中的代码。如果执行了循环体中的代码,则一定会对循环后的表达式(i++)求值,即递增 i 的值。这个 for 循环语句与下面的 while 语句的功能相同:

var count = 10; 
var i = 0; 
while (i < count){ 
 alert(i); 
 i++; 
}


使用 while 循环做不到的,使用 for 循环同样也做不到。也就是说,for 循环只是把与循环有关的代码集中在了一个位置。有必要指出的是,在 for 循环的变量初始化表达式中,也可以不使用 var 关键字。该变量的初始化可以在外部执行,例如:

var count = 10; 
var i; 
for (i = 0; i < count; i++){ 
 alert(i); 
}

以上代码与在循环初始化表达式中声明变量的效果是一样的。由于 ECMAScript 中不存在块级作用
域(第 4 章将进一步讨论这一点),因此在循环内部定义的变量也可以在外部访问到。例如:

var count = 10; 
for (var i = 0; i < count; i++){
  alert(i); 
} 
alert(i); //10


在这个例子中,会有一个警告框显示循环完成后变量 i 的值,这个值是 10。这是因为,即使 i 是在循环内部定义的一个变量,但在循环外部仍然可以访问到它。此外,for 语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这三个表达式全部省略,就会创建一个无限循环,例如:

for (;;) { // 无限循环
 doSomething(); 
}


而只给出控制表达式实际上就把 for 循环转换成了 while 循环,例如:

var count = 10; 
var i = 0; 
for (; i < count; ){ 
 alert(i); 
 i++; 
}

由于 for 语句存在极大的灵活性,因此它也是 ECMAScript 中最常用的一个语句。
3.6.5 for-in语句
for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。以下是 for-in 语句的语法:

for (property in expression) statement

 
下面是一个示例:

for (var propName in window) { 
 document.write(propName); 
}


在这个例子中,我们使用 for-in 循环来显示了 BOM 中 window 对象的所有属性。每次执行循环时,都会将 window 对象中存在的一个属性名赋值给变量 propName。这个过程会一直持续到对象中的所有属性都被枚举一遍为止。与 for 语句类似,这里控制语句中的 var 操作符也不是必需的。但是,为了保证使用局部变量,我们推荐上面例子中的这种做法。ECMAScript 对象的属性没有顺序。因此,通过 for-in 循环输出的属性名的顺序是不可预测的。
具体来讲,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。但是,如果表示要迭代的对象的变量值为 null 或 undefined,for-in 语句会抛出错误。ECMAScript 5 更正了这一行为;对这种情况不再抛出错误,而只是不执行循环体。为了保证最大限度的兼容性,建议在使用 for-in 循环之前,先检测确认该对象的值不是 null 或 undefined。
Safari 3 以前版本的 for-in 语句中存在一个 bug,该 bug 会导致某些属性被返回两次。
3.6.6 label语句
使用 label 语句可以在代码中添加标签,以便将来使用。以下是 label 语句的语法:

label: statement


下面是一个示例:

start: for (var i=0; i < count; i++) { 
 alert(i); 
}

这个例子中定义的 start 标签可以在将来由 break 或 continue 语句引用。加标签的语句一般都要与 for 语句等循环语句配合使用。
3.6.7 break和continue语句
break 和 continue 语句用于在循环中精确地控制代码的执行。其中,break 语句会立即退出循环,强制继续执行循环后面的语句。而 continue 语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行。

请看下面的例子:

var num = 0; 
for (var i=1; i < 10; i++) { 
 if (i % 5 == 0) { 
 break; 
 } 
 num++; 
} 
alert(num); //4

这个例子中的 for 循环会将变量 i 由 1 递增至 10。在循环体内,有一个 if 语句检查 i 的值是否可以被 5 整除(使用求模操作符)。如果是,则执行 break 语句退出循环。另一方面,变量 num 从 0 开始,用于记录循环执行的次数。在执行 break 语句之后,要执行的下一行代码是 alert()函数,结果显示 4。也就是说,在变量 i 等于 5 时,循环总共执行了 4 次;而 break 语句的执行,导致了循环在num 再次递增之前就退出了。如果在这里把 break 替换为 continue 的话,则可以看到另一种结果:

var num = 0; 
for (var i=1; i < 10; i++) { 
 if (i % 5 == 0) { 
 continue; 
} 
 num++; 
} 
alert(num); //8

例子的结果显示 8,也就是循环总共执行了 8 次。当变量 i 等于 5 时,循环会在 num 再次递增之前退出,但接下来执行的是下一次循环,即 i 的值等于 6 的循环。于是,循环又继续执行,直到 i 等于10 时自然结束。而 num 的最终值之所以是 8,是因为 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


在这个例子中,outermost 标签表示外部的 for 语句。如果每个循环正常执行 10 次,则 num++语句就会正常执行 100 次。换句话说,如果两个循环都自然结束,num 的值应该是 100。但内部循环中的 break 语句带了一个参数:要返回到的标签。添加这个标签的结果将导致 break 语句不仅会退出内部的 for 语句(即使用变量 j 的循环),而且也会退出外部的 for 语句(即使用变量 i 的循环)。为此,当变量 i 和 j 都等于 5 时,num 的值正好是 55。同样,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) { 
 continue outermost; 
 } 
 num++; 
 } 
} 
alert(num); //95


在这种情况下,continue 语句会强制继续执行循环——退出内部循环,执行外部循环。当 j 是 5时,continue 语句执行,而这也就意味着内部循环少执行了 5 次,因此 num 的结果是 95。虽然联用 break、continue 和 label 语句能够执行复杂的操作,但如果使用过度,也会给调试带来麻烦。在此,我们建议如果使用 label 语句,一定要使用描述性的标签,同时不要嵌套过多的循环。

注:break是退出当前循环体,continue是退出当前循环继续执行,这里要多练习几遍,才能体会到label和break、continue混合使用的妙处
3.6.8 with语句
with 语句的作用是将代码的作用域设置到一个特定的对象中。with 语句的语法如下:

with (expression) statement;


定义 with 语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子所示:

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


上面几行代码都包含 location 对象。如果使用 with 语句,可以把上面的代码改写成如下所示:

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

在这个重写后的例子中,使用 with 语句关联了 location 对象。这意味着在 with 语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location 对象中是否有同名的属性。如果发现了同名属性,则以 location 对象属性的值作为变量的值。严格模式下不允许使用 with 语句,否则将视为语法错误。由于大量使用 with 语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用 with 语句。
3.6.9 switch语句
switch 语句与 if 语句的关系最为密切,而且也是在其他语言中普遍使用的一种流控制语句。
ECMAScript 中 switch 语句的语法与其他基于 C 的语言非常接近,如下所示:

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


switch 语句中的每一种情形(case)的含义是:“如果表达式等于这个值(value),则执行后面的语句(statement)”。而 break 关键字会导致代码执行流跳出 switch 语句。如果省略 break 关键字,就会导致执行完当前 case 后,继续执行下一个 case。最后的 default 关键字则用于在表达式不匹配前面任何一种情形的时候,执行机动代码(因此,也相当于一个 else 语句)。从根本上讲,switch 语句就是为了让开发人员免于编写像下面这样的代码:

if (i == 25){ 
 alert("25"); 
} else if (i == 35) { 
 alert("35"); 
} else if (i == 45) { 
 alert("45"); 
} else { 
 alert("Other"); 
}


而与此等价的 switch 语句如下所示:

switch (i) { 
 case 25: 
 alert("25"); 
 break; 
 case 35: 
 alert("35"); 
 break; 
 case 45: 
 alert("45"); 
 break; 
 default: 
 alert("Other"); 
}

通过为每个 case 后面都添加一个 break 语句,就可以避免同时执行多个 case 代码的情况。假如确实需要混合几种情形,不要忘了在代码中添加注释,说明你是有意省略了 break 关键字,如下所示:

switch (i) { 
 case 25: 
 /* 合并两种情形 */ 
 case 35: 
 alert("25 or 35"); 
 break; 
 case 45: 
 alert("45"); 
 break; 
 default: 
 alert("Other"); 
}

虽然 ECMAScript 中的 switch 语句借鉴自其他语言,但这个语句也有自己的特色。首先,可以在switch 语句中使用任何数据类型(在很多其他语言中只能使用数值),无论是字符串,还是对象都没有问题。其次,每个 case 的值不一定是常量,可以是变量,甚至是表达式。请看下面这个例子:

switch ("hello world") { 
 case "hello" + " world": 
 alert("Greeting was found."); 
 break; 
 case "goodbye": 
 alert("Closing was found."); 
 break; 
 default: 
 alert("Unexpected message was found."); 
}

在这个例子中,switch 语句使用的就是字符串。其中,第一种情形实际上是一个对字符串拼接操作求值的表达式。由于这个字符串拼接表达式的结果与 switch 的参数相等,因此结果就会显示"Greeting was found."。而且,使用表达式作为 case 值还可以实现下列操作:

var num = 25; 
switch (true) { 
 case num < 0: 
 alert("Less than 0."); 
 break; 
 case num >= 0 && num <= 10: 
 alert("Between 0 and 10."); 
 break; 
 case num > 10 && num <= 20: 
 alert("Between 10 and 20."); 
 break; 
 default: 
 alert("More than 20."); 
}

这个例子首先在 switch 语句外面声明了变量 num。而之所以给 switch 语句传递表达式 true,是因为每个 case 值都可以返回一个布尔值。这样,每个 case 按照顺序被求值,直到找到匹配的值或者遇到 default 语句为止(这正是这个例子的最终结果)。switch 语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串"10"不等于数值 10)。
3.7 函数
函数对任何语言来说都是一个核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。ECMAScript 中的函数使用 function 关键字来声明,后跟一组参数以及函数体。函数的基本语法如下所示:

function functionName(arg0, arg1,...,argN) { 
 statements 
}

以下是一个函数示例:

function sayHi(name, message) { 
 alert("Hello " + name + "," + message); 
}

这个函数可以通过其函数名来调用,后面还要加上一对圆括号和参数(圆括号中的参数如果有多个,可以用逗号隔开)。调用 sayHi()函数的代码如下所示:

sayHi("Nicholas", "how are you today?");

这个函数的输出结果是"Hello Nicholas,how are you today?"。函数中定义中的命名参数 name和 message 被用作了字符串拼接的两个操作数,而结果最终通过警告框显示了出来。ECMAScript 中的函数在定义时不必指定是否返回值。实际上,任何函数在任何时候都可以通过return 语句后跟要返回的值来实现返回值。请看下面的例子:

function sum(num1, num2) { 
 return num1 + num2; 
}

这个 sum()函数的作用是把两个值加起来返回一个结果。我们注意到,除了 return 语句之外,没有任何声明表示该函数会返回一个值。调用这个函数的示例代码如下:

var result = sum(5, 10);

这个函数会在执行完 return 语句之后停止并立即退出。因此,位于 return 语句之后的任何代码都永远不会执行。例如:

function sum(num1, num2) { 
 return num1 + num2; 
 alert("Hello world"); // 永远不会执行
}

在这个例子中,由于调用 alert()函数的语句位于 return 语句之后,因此永远不会显示警告框。当然,一个函数中也可以包含多个 return 语句,如下面这个例子中所示:

function diff(num1, num2) { 
 if (num1 < num2) { 
 return num2 - num1; 
 } else { 
 return num1 - num2; 
 } 
}

这个例子中定义的 diff()函数用于计算两个数值的差。如果第一个数比第二个小,则用第二个数减第一个数;否则,用第一个数减第二个数。代码中的两个分支都具有自己的 return 语句,分别用于执行正确的计算。另外,return 语句也可以不带有任何返回值。在这种情况下,函数在停止执行后将返回 undefined值。这种用法一般用在需要提前停止函数执行而又不需要返回值的情况下。比如在下面这个例子中,就不会显示警告框:

function sayHi(name, message) { 
 return; 
 alert("Hello " + name + "," + message); //永远不会调用
}

推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值。否则,如果函数有时候返回值,有时候有不返回值,会给调试代码带来不便。严格模式对函数有一些限制:
 不能把函数命名为 eval 或 arguments;
 不能把参数命名为 eval 或 arguments;
 不能出现两个命名参数同名的情况。
如果发生以上情况,就会导致语法错误,代码无法执行。
3.7.1 理解参数
ECMAScript 函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。之所以会这样,原因是 ECMAScript 中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。如果这个数组中不包含任何元素,无所谓;如果包含多个元素,也没有问题。实际上,在函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。其实,arguments 对象只是与数组类似(它并不是 Array 的实例),因为可以使用方括号语法访问它的每一个元素(即第一个元素是 arguments[0],第二个元素是 argumetns[1],以此类推),使用 length 属性来确定传递进来多少个参数。在前面的例子中,sayHi()函数的第一个参数的名字叫name,而该参数的值也可以通过访问 arguments[0]来获取。因此,那个函数也可以像下面这样重写,即不显式地使用命名参数:

function sayHi() { 
 alert("Hello " + arguments[0] + "," + arguments[1]); 
}

这个重写后的函数中不包含命名的参数。虽然没有使用 name 和 message 标识符,但函数的功能依旧。这个事实说明了 ECMAScript 函数的一个重要特点:命名的参数只提供便利,但不是必需的。另外,在命名参数方面,其他语言可能需要事先创建一个函数签名,而将来的调用必须与该签名一致。但在 ECMAScript 中,没有这些条条框框,解析器不会验证命名参数。通过访问 arguments 对象的 length 属性可以获知有多少个参数传递给了函数。下面这个函数会在每次被调用时,输出传入其中的参数个数:

function howManyArgs() { 
 alert(arguments.length); 
} 
howManyArgs("string", 45); //2 
howManyArgs(); //0 
howManyArgs(12); //1

执行以上代码会依次出现 3 个警告框,分别显示 2、0 和 1。由此可见,开发人员可以利用这一点让函数能够接收任意个参数并分别实现适当的功能。请看下面的例子:

function doAdd() { 
 if(arguments.length == 1) { 
 alert(arguments[0] + 10); 
 } else if (arguments.length == 2) { 
 alert(arguments[0] + arguments[1]); 
 } 
} 
doAdd(10); //20 
doAdd(30, 20); //50

函数 doAdd()会在只有一个参数的情况下给该参数加上 10;如果是两个参数,则将那个参数简单相加并返回结果。因此,doAdd(10)会返回 20,而 doAdd(30,20)则返回 50。虽然这个特性算不上完美的重载,但也足够弥补 ECMAScript 的这一缺憾了。另一个与参数相关的重要方面,就是 arguments 对象可以与命名参数一起使用,如下面的例子所示:

function doAdd(num1, num2) { 
 if(arguments.length == 1) { 
 alert(num1 + 10); 
 } else if (arguments.length == 2) { 
 alert(arguments[0] + num2); 
 } 
}

在重写后的这个 doAdd()函数中,两个命名参数都与 arguments 对象一起使用。由于 num1 的值与 arguments[0]的值相同,因此它们可以互换使用(当然,num2 和 arguments[1]也是如此)。关于 arguments 的行为,还有一点比较有意思。那就是它的值永远与对应命名参数的值保持同步。例如:

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


每次执行这个 doAdd()函数都会重写第二个参数,将第二个参数的值修改为 10。因为 arguments对象中的值会自动反映到对应的命名参数,所以修改 arguments[1],也就修改了 num2,结果它们的值都会变成 10。不过,这并不是说读取这两个值会访问相同的内存空间;它们的内存空间是独立的,但它们的值会同步。另外还要记住,如果只传入了一个参数,那么为 arguments[1]设置的值不会反应到命名参数中。这是因为 arguments 对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。

关于参数还要记住最后一点:没有传递值的命名参数将自动被赋予 undefined 值。这就跟定义了变量但又没有初始化一样。例如,如果只给 doAdd()函数传递了一个参数,则 num2 中就会保存undefined 值。
严格模式对如何使用 arguments 对象做出了一些限制。首先,像前面例子中那样的赋值会变得无效。也就是说,即使把 arguments[1]设置为 10,num2 的值仍然还是 undefined。其次,重写arguments 的值会导致语法错误(代码将不会执行)。ECMAScript 中的所有参数传递的都是值,不可能通过引用传递参数。
3.7.2 没有重载
ECMAScript 函数不能像传统意义上那样实现重载。而在其他语言(如 Java)中,可以为一个函数编写两个定义,只要这两个定义的签名(接受的参数的类型和数量)不同即可。如前所述,ECMAScirpt函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的。如果在 ECMAScript 中定义了两个名字相同的函数,则该名字只属于后定义的函数。请看下面的例子:

function addSomeNumber(num){ 
 return num + 100; 
} 
function addSomeNumber(num) { 
 return num + 200; 
} 
var result = addSomeNumber(100); //300


在此,函数 addSomeNumber()被定义了两次。第一个版本给参数加 100,而第二个版本给参数加200。由于后定义的函数覆盖了先定义的函数,因此当在最后一行代码中调用这个函数时,返回的结果就是 300。如前所述,通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。
3.8 小结
javascript 的核心语言特性在 ECMA-262 中是以名为 ECMAScript 的伪语言的形式来定义的。ECMAScript 中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但没有对取得输入和产生输出的机制作出规定。理解 ECMAScript 及其纷繁复杂的各种细节,是理解其在Web 浏览器中的实现——javascript 的关键。目前大多数实现所遵循的都是 ECMA-262 第 3 版,但很多也已经着手开始实现第 5 版了。以下简要总结了 ECMAScript 中基本的要素。
 ECMAScript 中的基本数据类型包括 Undefined、Null、Boolean、Number 和 String。
 与其他语言不同,ECMScript 没有为整数和浮点数值分别定义不同的数据类型,Number 类型可用于表示所有数值。
 ECMAScript 中也有一种复杂的数据类型,即 Object 类型,该类型是这门语言中所有对象的基础类型。
 严格模式为这门语言中容易出错的地方施加了限制。
 ECMAScript 提供了很多与 C 及其他类 C 语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。
 ECMAScript 从其他语言中借鉴了很多流控制语句,例如 if 语句、for 语句和 switch 语句等。ECMAScript 中的函数与其他语言中的函数有诸多不同之处。
 无须指定函数的返回值,因为任何 ECMAScript 函数都可以在任何时候返回任何值。
 实际上,未指定返回值的函数返回的是一个特殊的 undefined 值。
 ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式传递的。
 可以向 ECMAScript 函数传递任意数量的参数,并且可以通过 arguments 对象来访问这些参数。
 由于不存在函数签名的特性,ECMAScript 函数不能重载。

标签: javascript
分享给朋友:

相关文章

6、第五章--引用类型(Date类型、RegExp类型)

6、第五章--引用类型(Date类型、RegExp类型)

5.3 Date 类型ECMAScript 中的 Date 类型是在早期 Java 中的 java.util.Date&...

4、第四章--JavaScript变量、作用域和内存问题

4、第四章--JavaScript变量、作用域和内存问题

4.1 基本类型和引用类型的值ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象...

7、第五章--引用类型(Function类型、基本包装类型)

7、第五章--引用类型(Function类型、基本包装类型)

5.5 Function 类型说起来 ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象。每个函数都是 ...

5、第五章--引用类型(Object类型、Array类型)

5、第五章--引用类型(Object类型、Array类型)

引用类型的值(对象)是引用类型的一个实例。在 ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript从技术上讲是一...

1、JavaScript基本概念(简介、语法、数据类型)

1、JavaScript基本概念(简介、语法、数据类型)

Javascript包含三部分:核心(ECMAScript),文档对象模型(DOM),浏览器对象模型(BOM)核心(ECMAScript):由ECMA-262定义,提供核心语言功能文档对象模型(DOM...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信