资讯·论坛·笑话大全·QQ表情·设为首页
发新话题
打印

[java] 进阶教程:编写高级JavaScript应用代码

进阶教程:编写高级JavaScript应用代码

1、创建高级对象
1 p5 y/ O& \% K" e5 ?* v: e" [我爱电脑技术社区--打造最好的电脑技术自学交流平台
( n$ ^/ E2 y0 _5 w+ k, y电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站使用构造函数来创建对象 我爱电脑技术论坛3 Z4 z8 E3 t! W' f  R* e
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ I2 m" n* h. P( Q
构造函数是一个函数,调用它来例示并初始化特殊类型的对象。可以使用 new 关键字来调用一个构造函数。下面给出了使用构造函数的新示例。 我爱电脑技术论坛5 i2 Q* w; j) a4 O4 {/ [
打造最好的电脑自学交流论坛$ I- Q2 S9 u+ X2 K
var myObject = new Object(); // 创建没有属性的通用对象。
, `; I2 h7 F/ q/ w0 q  O# D电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2 }. C' {# @& g! w$ q- M
var myBirthday = new Date(1961, 5, 10); // 创建一个 Date 对象。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' A  N: N7 W1 Y3 J9 Y" b# x
www.520diannao.com4 V5 c; B2 z# H! j, V& ^
var myCar = new Car(); // 创建一个用户定义的对象,并初始化其属性。 我爱电脑技术论坛1 y) G+ g; Y  }$ o- W" r6 l  P
& h7 \& c) [) W9 y" T2 }
通过构造函数将一个参数作为特定的 this 关键字的值传递给新创建的空对象。然后构造函数负责为新对象执行适应的初始化(创建属性并给出其初始值)。完成后,构造函数返回它所构造的对象的一个参数。
: |& H9 a& e- U: O# f电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
4 i  M! p$ ?5 A  Q, Wwww.520diannao.com编写构造函数 www.520diannao.com: f, |: h* d* S0 A
* M; p: i( ]- h1 _6 q$ C9 t: z
可以使用 new 运算符结合像 Object()、Date() 和 Function() 这样的预定义的构造函数来创建对象并对其初始化。面向对象的编程其强有力的特征是定义自定义构造函数以创建脚本中使用的自定义对象的能力。创建了自定义的构造函数,这样就可以创建具有已定义属性的对象。下面是自定义函数的示例(注意 this 关键字的使用)。
# t* E: @. J& L0 h5 w4 |; X我爱电脑技术社区--打造最好的电脑技术自学交流平台
" m8 a, b  Z- V3 \8 G7 kfunction Circle (xPoint, yPoint, radius) {  打造最好的电脑自学交流论坛0 s$ Q5 [( Q) Q: A6 W

. `& W3 K9 ^( o2 `3 ~9 J, u3 O5 {打造最好的电脑自学交流论坛this.x = xPoint; // 圆心的 x 坐标。 我爱电脑技术社区--打造最好的电脑技术自学交流平台2 x9 |/ [2 m; o4 y0 F3 U9 p
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站" ?2 S3 t4 f( Q# c) i9 g3 M
this.y = yPoint; // 圆心的 y 坐标。
# S  y0 K# Q! O$ R4 J: K# f: f我爱电脑技术论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台2 T( {: k4 @' {! [/ S
this.r = radius; // 圆的半径。  }  www.520diannao.com( ?& x" I4 k! N9 u# B

! U5 X6 f! D8 O' d4 K打造最好的电脑自学交流论坛
6 a! O% y/ a( O+ X- D1 ^7 o调用 Circle 构造函数时,给出圆心点的值和圆的半径(所有这些元素是完全定义一个独特的圆对象所必需的)。结束时 Circle 对象包含三个属性。下面是如何例示 Circle 对象。  var aCircle = new Circle(5, 11, 99); 我爱电脑技术社区--打造最好的电脑技术自学交流平台1 Y+ _$ r  h! W- }/ e

: E5 z+ T- l" v+ K7 `$ y电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站使用原型来创建对象 我爱电脑技术社区--打造最好的电脑技术自学交流平台4 {/ j) C( W  X. j- X7 s! m- F4 E
打造最好的电脑自学交流论坛0 R6 s7 U* ~! z" J
在编写构造函数时,可以使用原型对象(它本身是所有构造函数的一个属性)的属性来创建继承属性和共享方法。原型属性和方法将按引用复制给类中的每个对象,因此它们都具有相同的值。可以在一个对象中 更改原型属性的值,新的值将覆盖默认值,但仅在该实例中有效。属于这个类的其他对象不受此更改的影响。 6 d* \- j" Q* C; Z( b
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站* ?9 G* ^: u+ E; \0 R' E4 D

9 Q2 x1 q( d( ]; f6 |1 K' l. v0 m我爱电脑技术社区--打造最好的电脑技术自学交流平台下面给出了使用自定义构造函数的示例,Circle(注意 this 关键字的使用)。
3 V% O$ m) y0 S+ V打造最好的电脑自学交流论坛
! G! b' w! d# q: \( p电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术论坛* d3 ~) `/ `0 P8 M4 P# v' B  b9 S  {
Circle.prototype.pi = Math.PI;
) `5 H, w2 C) S( [& ?6 z电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
+ f3 p$ `9 _! ^/ y' Ifunction ACirclesArea () {   return this.pi * this.r * this.r; 我爱电脑技术社区--打造最好的电脑技术自学交流平台, Y5 z3 O8 F  b5 n( _
www.520diannao.com  F9 C; |* j9 _; F2 _
// 计算圆面积的公式为 ?r2。  }  Circle.prototype.area = ACirclesArea; www.520diannao.com( C9 x) p5 B& z; W6 c  k
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站; \2 x/ l2 f9 u! D& O7 N1 V
// 计算圆面积的函数现在是 Circle Prototype 对象的一个方法。
7 K8 I# ^3 ?$ G  B9 F! r我爱电脑技术社区--打造最好的电脑技术自学交流平台我爱电脑技术论坛  F! p1 }5 w0 q6 Q2 T
var a = ACircle.area();
' Q  q8 Y6 X# y! E' Q电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术论坛/ u) h, D! \5 m7 E8 h( O" H5 A3 z3 D8 z
// 此为如何在 Circle 对象上调用面积函数。
( e0 m1 A* k. w) k( G0 H$ R3 w打造最好的电脑自学交流论坛9 \( j+ O& T& P# F; f( ?. ]
使用这个原则,可以给预定义的构造函数(都具有原型对象)定义附加属性。
" Q4 \7 [* w9 }3 Twww.520diannao.com
% R- l" P, B, e  }5 t打造最好的电脑自学交流论坛例如,如果想要能够删除字符串的前后空格(与 VBScript 的 Trim 函数类似),就可以给 String 原型对象创建自己的方法。
( e# p* u8 D/ t3 }6 I
0 y# o+ U4 n' S  T7 g) J我爱电脑技术论坛// 增加一个名为 trim 的函数作为 我爱电脑技术社区--打造最好的电脑技术自学交流平台; t% Z1 B2 s  y: [, t

  v6 w- ~9 N' |7 R% i, N5 A9 bwww.520diannao.com// String 构造函数的原型对象的一个方法。
0 c5 q; `* L8 U. _+ }0 Q$ e; v* ?
/ b6 H# w4 y8 T6 x* }8 e& l电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站String.prototype.trim = function()  { 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站4 P% y, U5 T5 C5 c( c8 [& v
www.520diannao.com( R7 v! S/ i- \6 {
// 用正则表达式将前后空格 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站* a6 X9 `- B$ P" D0 i: @* w' t
8 g# {1 o4 |) D4 Q+ f5 B! t& o
// 用空字符串替代。 www.520diannao.com% g3 W2 @; T7 H" A! X

1 N6 Q& R* f3 y' I, W8 y我爱电脑技术社区--打造最好的电脑技术自学交流平台return this.replace(/(^\s*)|(\s*$)/g, "");  }
' \8 z* N2 o2 c* ?; v) ~( E, }+ a打造最好的电脑自学交流论坛
3 G: j+ N5 M% N5 h; P& n电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站// 有空格的字符串  var s = " leading and trailing spaces ";
) Q7 m2 J: ^5 D. d1 W5 W* Z9 ~3 z# p
// 显示 " leading and trailing spaces (35)"  window.alert(s + " (" + s.length + ")");
0 J3 }; v6 s5 P5 Y; F9 @' m电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站www.520diannao.com2 r4 X5 V5 G6 H& t2 x) |# B
// 删除前后空格  s = s.trim(); 我爱电脑技术社区--打造最好的电脑技术自学交流平台+ o) d8 u+ d& O3 P

1 y4 B: U1 j* W. Y我爱电脑技术论坛// 显示"leading and trailing spaces (27)"
6 ~/ U6 g! ?# x0 x; U! @我爱电脑技术社区--打造最好的电脑技术自学交流平台
0 C! w3 l0 P% [; ?( b. E打造最好的电脑自学交流论坛window.alert(s + " (" + s.length + ")");

TOP

2.递归 我爱电脑技术社区--打造最好的电脑技术自学交流平台) H0 j. M/ i3 e" A0 c& L
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站+ ]3 e  V+ p% ?  M0 \
我爱电脑技术论坛( X' }: u# ?5 V% E8 ~
递归是一种重要的编程技术。该方法用于让一个函数从其内部调用其自身。一个示例就是计算阶乘。0 的阶乘被特别地定义为 1。
: m% I, G* E# p" Kwww.520diannao.com我爱电脑技术社区--打造最好的电脑技术自学交流平台) h" J: A' ^) M7 U
更大数的阶乘是通过计算 1 * 2 * ...来求得的,每次增加 1,直至达到要计算其阶乘的那个数。 打造最好的电脑自学交流论坛+ i2 P. I6 @: b8 }

/ @; t2 `- L' v# J电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站下面的段落是用文字定义的计算阶乘的一个函数。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 d) z4 q& P% m, m
我爱电脑技术社区--打造最好的电脑技术自学交流平台' o0 w- V# G& A  _2 N
“如果这个数小于零,则拒绝接收。如果不是一个整数,则将其向下舍入为相邻的整数。如果这个数为 0,则其阶乘为 1。如果这个数大于 0,则将其与相邻较小的数的阶乘相乘。”
! U, V! a" }, r) F* \电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ y* W0 `6 k& j$ O, d# P
要计算任何大于 0 的数的阶乘,至少需要计算一个其他数的阶乘。用来实现这个功能的函数就是已经位于其中的函数;该函数在执行当前的这个数之前,必须调用它本身来计算相邻的较小数的阶乘。这就是一个递归示例。
5 p  h# [; L, U. J1 `$ V9 gwww.520diannao.com
. g' S% l) b  @& l* ^, y递归和迭代(循环)是密切相关的 ? 能用递归处理的算法也都可以采用迭代,反之亦然。确定的算法通常可以用几种方法实现,您只需选择最自然贴切的方法,或者您觉得用起来最轻松的一种即可。
- j. y7 B2 I2 L/ K5 R我爱电脑技术论坛
6 p# B$ @5 p# V! _1 P3 U电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 J' q! w5 J( Q- u* T
显然,这样有可能会出现问题。可以很容易地创建一个递归函数,但该函数不能得到一个确定的结果,并且不能达到一个终点。这样的递归将导致计算机执行一个“无限”循环。下面就是一个示例:在计算阶乘的文字描述中遗漏了第一条规则(对负数的处理) ,并试图计算任何负数的阶乘。这将导致失败,因为按顺序计算 -24 的阶乘时,首先不得不计算 -25 的阶乘;然而这样又不得不计算 -26 的阶乘;如此继续。很明显,这样永远也不会到达一个终止点。
+ v8 O- ^/ T& x4 k( Q+ x我爱电脑技术论坛
! U- g- _+ ]/ @# ?' c/ t4 n我爱电脑技术论坛因此在设计递归函数时应特别仔细。如果怀疑其中存在着无限递归的可能,则可以让该函数记录它调用自身的次数。如果该函数调用自身的次数太多,即使您已决定了它应调用多少次,就自动退出。 
  C4 t: R' U, w4 K' K( A3 i6 |电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术社区--打造最好的电脑技术自学交流平台, V# c1 c3 [1 @' Q
( t+ F! F: m& I. _- t6 W7 g4 N
下面仍然是阶乘函数,这次是用 JScript 代码编写的。 打造最好的电脑自学交流论坛- q0 W! h/ ?( W' X2 p. o

% }: F/ M: _+ ~( w- e; F" o* J打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' G8 g4 D9 x0 g% p& Y$ k
// 计算阶乘的函数。如果传递了// 无效的数值(例如小于零),// 将返回 -1,表明发生了错误。若数值有效,// 把数值转换为最相近的整数,并// 返回阶乘。function factorial(aNumber) {   aNumber = Math.floor(aNumber); // 如果这个数不是一个整数,则向下舍入。if (aNumber < 0) { // 如果这个数小于 0,拒绝接收。return -1;}if (aNumber == 0) { // 如果为 0,则其阶乘为 1。return 1;}else return (aNumber * factorial(aNumber - 1)); // 否则,递归直至完成。}
" {; F! a* g$ g# \www.520diannao.com打造最好的电脑自学交流论坛4 j' ?$ J5 V+ u; r. O
我爱电脑技术论坛) C' Z- j8 G/ |& R( g) z
3.变量范围 我爱电脑技术论坛% o6 H( m$ w! X: g

$ }+ L5 ]7 F$ g( N* ]电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
& V) h0 ^7 C7 z6 O7 awww.520diannao.comJScript 有两种变量范围:全局和局部。如果在任何函数定义之外声明了一个变量,则该变量为全局变量,且该变量的值在整个持续范围内都可以访问和修改。如果在函数定义内声明了一个变量,则该变量为局部变量。每次执行该函数时都会创建和破坏该变量;且它不能被该函数外的任何事物访问。 我爱电脑技术论坛3 q$ t+ g4 ?- `9 W6 f4 M8 O- m1 n% S6 q
www.520diannao.com4 j- s2 {, T2 e

4 m/ I% M" X8 i0 R我爱电脑技术论坛像C++这样的语言也有“块范围”。在这里,任何一对“{}”都定义新的范围。JScript 不支持块范围。
1 K, X& W5 s! Q0 z" _1 i# z3 @电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术社区--打造最好的电脑技术自学交流平台9 B1 ~( b/ A9 B  W# Z4 B$ x& s! Q
; ]. i# n" e$ x( v4 ~+ p1 c
一个局部变量的名称可以与某个全局变量的名称相同,但这是完全不同和独立的两个变量。因此,更改一个变量的值不会影响另一个变量的值。在声明局部变量的函数内,只有该局部变量有意义。
" v! n1 X( o- O; N/ C' t& p8 qwww.520diannao.com
( S  D& P/ G9 D& d( r& H' ^5 A) n打造最好的电脑自学交流论坛var aCentaur = "a horse with rider,"; // aCentaur 的全局定义。
* `. j2 ^5 ~& L' k' Z) Y我爱电脑技术社区--打造最好的电脑技术自学交流平台
8 g6 A) Y  ]& c4 f5 l// JScript 代码,为简洁起见有省略。
5 k! `0 w" Z3 V我爱电脑技术论坛我爱电脑技术论坛7 C5 w# a+ c$ k, A' p/ F
function antiquities() // 在这个函数中声明了一个局部 aCentaur 变量。 我爱电脑技术论坛* @+ d+ j4 p2 o$ h5 V) `
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2 A4 q; i3 U0 {0 u, f! C. U
{   // JScript 代码,为简洁起见有省略。 ! `3 G& O! L  G6 u$ ]& I

3 c' V5 @$ k/ ~8 Q% i" ^电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站var aCentaur = "A centaur is probably a mounted Scythian warrior"; 我爱电脑技术论坛% N% @: Y; }3 M& _2 T/ e: f
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2 i/ _! r1 o! g  o. d
// JScript 代码,为简洁起见有省略。 4 N8 a# t- R. }& t9 e2 s6 }

; F' |  F- L- ]4 j打造最好的电脑自学交流论坛aCentaur += ", misreported; that is, "; // 添加到局部变量。 , Y( `" I) e, m  H, z
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站8 y% q% R9 A( `. `
// JScript 代码,为简洁起见有省略。  } www.520diannao.com  a% ^0 j( X1 m+ V1 J+ \8 W
www.520diannao.com0 K! l* g6 M4 W/ ^/ k) h* f
// 函数结束。  var nothinginparticular = antiquities();
9 V4 b" u% o* E4 h2 T4 a& `我爱电脑技术论坛
' ^% ^5 m7 N. N/ R: m/ GaCentaur += " as seen from a distance by a naive innocent."; ! l4 T) L  G+ G+ I  {! _

# T+ H+ X0 c$ k4 n. c电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/*  在函数内,该变量的值为 "A centaur is probably a mounted Scythian warrior,  misreported; that is, ";在函数外,该变量的值为这句话的其余部分:

TOP

"a horse with rider, as seen from a distance by a naive innocent."  */  很重要的一点是注意变量是否是在其所属范围的开始处声明的。有时这会导致意想不到的情况。  tweak();  var aNumber = 100;  function tweak() {
+ S* |9 m  s/ x8 i! p  y打造最好的电脑自学交流论坛& B1 l; p7 F2 l; U( U
var newThing = 0; // 显式声明 newThing 变量。 我爱电脑技术论坛+ P8 Z% ]" z* v  w
我爱电脑技术论坛- h9 E% a  v: u& B: C
// 本语句将未定义的变量赋给 newThing,因为已有名为 aNumber 的局部变量。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站* U8 M+ t2 B4 l% ]4 }6 y; n

6 M8 G7 }" z& q打造最好的电脑自学交流论坛newThing = aNumber; 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ l& K1 p4 I, ~, v

  L% m4 C8 x7 F$ D6 O' v& U4 _www.520diannao.com//下一条语句将值 42 赋给局部的 aNumber。aNumber = 42; . o5 j# z; u( W
我爱电脑技术社区--打造最好的电脑技术自学交流平台+ u& M1 l/ M# r0 S$ k% R! E" R
if (false) {
3 b4 y9 t* n2 ?* \& W4 u2 t  Nwww.520diannao.com我爱电脑技术论坛# _2 ]6 ^" A" `
var aNumber; // 该语句永远不会执行。 打造最好的电脑自学交流论坛& M$ p! a/ W" h0 ^$ o6 i4 O7 l% B

( c" d6 r  x/ k/ z! E7 O1 T电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站aNumber = 123; // 该语句永远不会执行。 打造最好的电脑自学交流论坛- g( I: c. n! I  u7 I& {; J
# C5 H* g7 ^! a1 Z8 d" C5 e& ^
} // 条件语句结束。 打造最好的电脑自学交流论坛2 c9 d: W( F( C7 s+ M: B/ ^

6 _6 t( P( p$ c3 E电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站} // 该函数定义结束。 / i0 j( w$ I. a2 q

( @" z  m0 a; K/ h$ O  Q  a+ x5 Fwww.520diannao.com当 JScript 运行函数时,首先查找所有的变量声明,var someVariable;并以未定义的初始值创建变量。如果变量被声明时有值,var someVariable = "something";那么该变量仍以未定义的值初始化,并且只有在运行了声明行时才被声明值取代,假如曾经被声明过。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站  y( }* {+ v# ~1 g  I/ ^
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站8 N. K5 B( v. p- I# g$ Q
JScript 在运行代码前处理变量声明,所以声明是位于一个条件块中还是其他某些结构中无关紧要。JScript 找到所有的变量后立即运行函数中的代码。如果变量是在函数中显式声明的?也就是说,如果它出现于赋值表达式的左边但没有用 var 声明 ? 那么将把它创建为全局变量。复制、传递和比较数据  在 JScript 中,对数据的处理取决于该数据的类型。
9 l/ c4 H" C' b5 d' F打造最好的电脑自学交流论坛% R% ^7 M2 R9 _
按值和按引用的比较 我爱电脑技术论坛9 _5 {0 @3 I, o' R

$ A3 T; C( @) A, n  }6 dwww.520diannao.comNumbers 和 Boolean 类型的值 (true 和 false) 是按值来复制、传递和比较的。当按值复制或传递时,将在计算机内存中分配一块空间并将原值复制到其中。然后,即使更改原来的值,也不会影响所复制的值(反过来也一样),因为这两个值是独立的实体。对象、数组以及函数是按引用来复制、传递和比较的。 当按地址复制或传递时,实际是创建一个指向原始项的指针,然后就像拷贝一样来使用该指针。如果随后更改原始项,则将同时更改原始项和复制项(反过来也一样)。实际上只有一个实体;“复本”并不是一个真正的复本,而只是该数据的又一个引用。当按引用比较时,要想比较成功,两个变量必须参照完全相同的实体。例如,两个不同的 Array 对象即使包含相同的元素也将比较为不相等。要想比较成功,其中一个变量必须为另一个的参考。要想检查两个数组是否包含了相同的元素,比较 toString() 方法的结果。  最后,字符串是按引用复制和传递的,但是是按值来比较的。请注意,假如有两个 String 对象(用 new String("something") 创建的),按引用比较它们,但是,如果其中一个或者两者都是字符串值的话,按值比较它们。注意 鉴于 ASCII和 ANSI 字符集的构造方法,按序列顺序大写字母位于小写字母的前面。例如 "Zoo" 小于 "aardvark"。如果想执行不区分大小写的匹配,可以对两个字符串调用 toUpperCase() 或 toLowerCase()。传递参数给函数  按值传递一个参数给函数就是制作该参数的一个独立复本,即一个只存在于该函数内的复本。即使按引用传递对象和数组时,如果直接在函数中用新值覆盖原先的值,在函数外并不反映新值。只有在对象的属性或者数组的元素改变时,在函数外才可以看出。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! A3 `" g. J% O6 |# e! k2 L
我爱电脑技术社区--打造最好的电脑技术自学交流平台, k9 R5 h7 N0 B* j1 h* A
例如(使用 IE 对象模式):
2 M8 v) m: o! W6 \% Y我爱电脑技术社区--打造最好的电脑技术自学交流平台电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站, i2 V# G! Y/ ?+ P
// 本代码段破坏(覆盖)其参数,所以 我爱电脑技术论坛3 c: |# f( V! S9 P5 z7 B

: p+ U7 H" @' {- E我爱电脑技术论坛// 调用代码中反映不出变化。  function Clobber(param)  { 
9 _! N2 H, E$ _8 b) H& L电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
, T* X2 r6 K5 Jwww.520diannao.com// 破坏参数;在调用代码中 www.520diannao.com" Q/ H: h  g" k. T+ @4 f
我爱电脑技术论坛) X+ {  Q+ Y+ ~3 f5 Z& c
// 看不到。   param = new Object();  打造最好的电脑自学交流论坛" Z, Q+ v6 K* {! u- h% ?
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' N9 g! E" @$ L
param.message = "This will not work";  }
8 h( q4 O  s& H6 e2 q+ ~打造最好的电脑自学交流论坛
) T8 I/ @; r0 R我爱电脑技术论坛// 本段代码改变参数的属性, www.520diannao.com' M3 ]" w1 T9 a: x: q+ q

$ {3 n4 X4 B8 H) [  T我爱电脑技术论坛// 在调用代码中可看到属性改变。
* j' l# p) a9 L  A- wwww.520diannao.com打造最好的电脑自学交流论坛# I) u1 ]: N5 w% u* j: M" ~
function Update(param)  { 
/ x- t/ n8 k4 d
' D/ z7 ?8 ~1 V' K. y我爱电脑技术社区--打造最好的电脑技术自学交流平台// 改变对象的属性; 我爱电脑技术论坛- _5 Z1 o' a- j7 i8 s9 k

$ K' v' [; V' U9 o7 v7 Y// 可从调用代码中看到改变。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站5 x1 |4 T; k9 m) Z
打造最好的电脑自学交流论坛. c% r9 C( o6 F6 {% F
param.message = "I was changed";  } www.520diannao.com4 {$ ]* r% e  Y. j$ S. J/ F; Z

+ i: P3 M  `2 t2 O7 J- A" W" C电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站// 创建一个对象,并赋给一个属性。
8 ~/ r, Q9 P2 i$ w8 |, {8 `' s1 C我爱电脑技术论坛
$ g, q& j7 @: x; ?+ l9 V- P电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站var obj = new Object();
& b  e; U2 u/ C: d电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
" N% A$ d0 O0 v电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站obj.message = "This is the original"; 我爱电脑技术论坛( f. L' _3 m% _8 t5 i
* r4 U0 y& \! I- L: u2 \- V
// 调用 Clobber,并输出 obj.message。注意,它没有发生变化。 www.520diannao.com- r# @9 Y/ Y2 ]! b7 S& ]3 G  |# m
打造最好的电脑自学交流论坛" [# D% T) Q: z( Z( I; r
Clobber(obj); 我爱电脑技术论坛. T) d7 V, y1 C/ b

$ ]% g% z5 s) W我爱电脑技术论坛window.alert(obj.message); // 仍然显示 "This is the original"。
' o( l' Q5 [7 L5 E: Ewww.520diannao.com" }/ |, [5 l8 w; L$ w2 `- A& e4 A
// 调用 Update,并输出 obj.message。注意,它已经被改变了。
, c9 T' Y5 Y" ~. x) e4 c& j) y1 u
" m4 b; C: \9 O0 a) P我爱电脑技术社区--打造最好的电脑技术自学交流平台Update(obj);
$ ^# t  A8 O- r) p/ R& F3 F4 n我爱电脑技术论坛
; W; K9 h: s5 j3 b) @) o1 m0 Ywww.520diannao.comwindow.alert(obj.message); // 显示 "I was changed"。 www.520diannao.com' m. @  m* Z3 `9 m% F( H
我爱电脑技术论坛. L" l3 A# Q- Q/ C% u8 q8 W  }
检验数据 www.520diannao.com$ b% g. g, V9 u! z1 P
打造最好的电脑自学交流论坛( g% O  I- m3 m1 i/ p+ k
当按值进行检验时,是比较两个截然不同的项以查看它们是否相等。通常,该比较是逐字节进行的。当按引用进行检验时,是看这两项是否是指向同一个原始项的指针。如果是,则比较结果是相等;如果不是,即使它们每个字节都包含完全一样的值,比较结果也为不相等。
8 C4 m& H9 _5 F6 {我爱电脑技术论坛
/ T5 v* _+ ~7 E% [我爱电脑技术社区--打造最好的电脑技术自学交流平台按引用复制和传递字符串能节约内存;但是由于在字符串被创建后不能进行更改,因此可以按值进行比较。这样可以检查两个字符串是否包含相同的内容,即使它们是完全独立产生的。

TOP

发新话题