文档库 最新最全的文档下载
当前位置:文档库 › js

js

js
js

最近,我面试了一个有五年Web 应用程序开发经验的软件开发人员。四年半来她一直在从事JavaScript 相关的工作,她自认为JavaScript 技能非常好,但在不久之后我就发现实际上她对JavaScript 知之甚少。话虽这样说,但我确实没有责备她的意思。JavaScript 真的是很有趣。很多人(包括我自己,直到最近!)都认为自己很擅长JavaScript 语言,因为他们都知道C/C++/C#,或者有一些以前的编程经验。

在某种程度上,这种假设并不是完全没有根据的。用JavaScript 很容易做些简单的事情。入门的门槛很低,该语言很宽松,它不需要您知道很多细节就可以开始用它进行编码。甚至非编程人员也可能用它在几个小时内为主页编写一些有用的脚本。

的确,直到最近,仅仅凭借MSDN? DHTML 参考资料和我的C++/C# 经验,我也总能勉强利用这点JavaScript 知识完成一些任务。只是当我开始编写真实的AJAX 应用程序时,我才意识到实际上我的JavaScript 知识还非常不够。这个新一代的Web 应用程序的复杂性和交互性需要程序员以完全不同的方法来编写JavaScript 代码。它们是真正的JavaScript 应用程序!我们在编写一次性脚本时一直采用的方法已完全不再有效。

面向对象编程(OOP) 是一种流行的编程方法,很多JavaScript 库中都使用这种方法,以便更好地管理和维护基本代码。JavaScript 支持OOP,但与诸如C++、C# 或Visual Basic? 等流行的Microsoft? .NET Framework 兼容语言相比,它支持OOP 的方式非常不同,因此主要使用这些语言的开发人员开始可能会觉得在JavaScript 中使用OOP 很奇怪而且不直观。我写本文就是为了深入讨论JavaScript 语言实际上如何支持面向对象编程,以及您如何使用这一支持在JavaScript 中高效地进行面向对象开发。下面首先讨论对象(还能先讨论其他别的什么呢?)。

JavaScript 对象是词典

在C++ 或C# 中,在谈论对象时,是指类或结构的实例。对象有不同的属性和方法,具体取决于将它们实例化的模板(即类)。而JavaScript 对象却不是这样。在JavaScript 中,对象只是一组名称/值对,就是说,将JavaScript 对象视为包含字符串关键字的词典。我们可以使用熟悉的“.”(点)运算符或“[]”运算符,来获得和设置对象的属性,这是在处理词典时通常采用的方法。以下代码段

var userObject = new Object();

https://www.wendangku.net/doc/f83610398.html,stLoginTime = new Date();

alert(https://www.wendangku.net/doc/f83610398.html,stLoginTime);

的功能与下面的代码段完全相同:

var userObject = {}; // equivalent to new Object()

userObject[“lastLoginTime”] = new Date();

alert(userObject[“lastLoginTime”]);

我们还可以直接在userObject 的定义中定义lastLoginTime 属性,如下所示:

var userObject = ;

alert(https://www.wendangku.net/doc/f83610398.html,stLoginTime);

注意,它与C# 3.0 对象初始值非常相似。而且,熟悉Python 的人会发现在第二和第三个代码段中实例化userObject 的方法与在Python 中指定词典的方法完全相同。唯一的差异是JavaScript 对象/词典只接受字符串关键字,而不是像Python 词典那样接受可哈希化的对象。

这些示例还显示JavaScript 对象比C++ 或C# 对象具有更大的可延展性。您不必预先声明属性lastLoginTime —如果userObject 没有该名称的属性,该属性将被直接添加到userObject。如果记住JavaScript 对象是词典,您就不会对此感到吃惊了,毕竟,我们一直在向词典添加新关键字(和其各自的值)。

这样,我们就有了对象属性。对象方法呢?同样,JavaScript 与C++/C# 不同。若要理解对象方法,首先需要仔细了解一下JavaScript 函数。JavaScript 函数是最棒的

在很多编程语言中,函数和对象通常被视为两样不同的东西。在JavaScript 中,其差别很模糊— JavaScript 函数实际上是具有与它关联的可执行代码的对象。请如此看待普通函数:

function func(x) {

alert(x);

}

func(“blah”);

这就是通常在JavaScript 中定义函数的方法。但是,还可以按以下方法定义该函数,您在此创建匿名函数对象,并将它赋给变量func

var func = function(x) {

alert(x);

};

func(“blah2”);

甚至也可以像下面这样,使用Function 构造函数:

var func = new Function(“x”,“alert(x);”);

func(“blah3”);

此示例表明函数实际上只是支持函数调用操作的对象。最后一个使用Function 构造函数来定义函数的方法并不常用,但它展示的可能性非常有趣,因为您可能注意到,该函数的主体正是Function 构造函数的String 参数。这意味着,您可以在运行时构造任意函数。

为了进一步演示函数是对象,您可以像对其他任何JavaScript 对象一样,在函数中设置或添加属性:

function sayHi(x) {

alert(“Hi,“ + x + “!”);

}

sayHi.text = “Hello World!”;

sayHi[“text2”] = “Hello World... again.”;

alert(sayHi[“text”]); // displays “Hello World!”

alert(sayHi.text2); // displays “Hello World... again.”

作为对象,函数还可以赋给变量、作为参数传递给其他函数、作为其他函数的值返回,并可以作为对象的属性或数组的元素进行存储等等。

// assign an anonymous function to a variable

var greet = function(x) {

alert(“Hello, “ + x);

};

greet(“MSDN readers”);

// passing a function as an argument to another function square(x) {

return x * x;

}

function operateOn(num, func) {

return func(num);

}

// displays 256

alert(operateOn(16, square));

// functions as return values

function makeIncrementer() {

return function(x) { return x + 1; };

}

var inc = makeIncrementer();

// displays 8

alert(inc(7));

// functions stored as array elements

var arr = [];

arr[0] = function(x) { return x * x; };

arr[1] = arr[0](2);

arr[2] = arr[0](arr[1]);

arr[3] = arr[0](arr[2]);

// displays 256

alert(arr[3]);

// functions as object properties

var obj = { “toString” : function() { return “This is an object.”; } };

// calls obj.toString()

alert(obj);

记住这一点后,向对象添加方法将是很容易的事情:只需选择名称,然后将函数赋给该名称。因此,我通过将匿名函数分别赋给相应的方法名称,在对象中定义了三个方法:

var myDog = {

“name” : “Spot”,

“bark” : function() ,

“displayFullName” : function() {

alert(https://www.wendangku.net/doc/f83610398.html, + “ The Alpha Dog”);

},

“chaseMrPostman” : function() {

// implementation beyond the scope of this article

}

};

myDog.displayFullName();

myDog.bark(); // Woof!

C++/C# 开发人员应当很熟悉displayFullName 函数中使用的“this”关键字—它引用一个对象,通过对象调用方法(使用Visual Basic 的开发人员也应当很熟悉它,它在Visual Basic 中叫做“Me”)。因此在上面的示例中,displayFullName 中的“this”的值是myDog 对象。但是,“this”的值不是静态的。通过不同对象调用“this”时,它的值也会更改以便指向相应的对象,如下所示。

function displayQuote() {

// the value of “this” will change; depends on

// which object it is called through

alert(this.memorableQuote);

}

var williamShakespeare = {

“memorableQuote”: “It is a wise father that knows his own child.”,

“sayIt” : displayQuote

};

var markTwain = {

“memorableQuote”: “Golf is a good walk spoiled.”,

“sayIt” : displayQuote

};

var oscarWilde = {

“memorableQuote”: “True friends stab you in the front.”

// we can call the function displayQuote

// as a method of oscarWilde without assigning it

// as oscarWilde’s method.

//”sayIt” : displayQuote

};

williamShakespeare.sayIt(); // true, true

ma rkTwain.sayIt(); // he didn’t know where to play golf

// watch this, each function has a method call()

// that allows the function to be called as a

// method of the object passed to call() as an

// argument.

// this line below is equivalent to assigning

// displayQuote to sayIt, and calling oscarWilde.sayIt(). displayQuote.call(oscarWilde); // ouch!

最后一行表示的是将函数作为对象的方法进行调用的另一种方式。请记住,JavaScript 中的函数是对象。每个函数对象都有一个名为call 的方法,它将函数作为第一个参数的方法进行调用。就是说,作为函数第一个参数传递给call 的任何对象都将在函数调用中成为“this”的值。这一技术对于调用基类构造函数来说非常有用,稍后将对此进行介绍。

有一点需要记住,绝不要调用包含“this”(却没有所属对象)的函数。否则,将违反全局命名空间,因为在该调用中,“this”将引用全局对象,而这必然会给您的应用程序带来灾难。例如,下面的脚本将更改JavaScript 的全局函数isNaN 的行为。一定不要这样做!

alert(“NaN is NaN: “ + isNaN(NaN));

function x() {

this.isNaN = function() {

return “not anymore!”;

};

}

// alert!!! trampling the Global object!!!

x();

alert(“NaN is NaN: “ + isNaN(NaN));

到这里,我们已经介绍了如何创建对象,包括它的属性和方法。但如果注意上面的所有代码段,您会发现属性和方法是在对象定义本身中进行硬编码的。但如果需要更好地控制对象的创建,该怎么做呢?例如,您可能需要根据某些参数来计算对象的属性值。或者,可能需要将对象的属性初始化为仅在运行时才能获得的值。也可能需要创建对象的多个实例(此要求非常常见)。

在C# 中,我们使用类来实例化对象实例。但JavaScript 与此不同,因为它没有类。您将在下一节中看到,您可以充分利用这一情况:函数在与“new”运算符一起使用时,函数将充当构造函数。构造函数而不是类

前面提到过,有关JavaScript OOP 的最奇怪的事情是,JavaScript 不像C# 或C++ 那样,它没有类。在C# 中,在执行类似下面的操作时:Dog spot = new Dog();

将返回一个对象,该对象是Dog 类的实例。但在JavaScript 中,本来就没有类。与访问类最近似的方法是定义构造函数,如下所示:

function DogConstructor(name) {

https://www.wendangku.net/doc/f83610398.html, = name;

this.respondTo = function(name) {

if(https://www.wendangku.net/doc/f83610398.html, == name) {

alert(“Woof”);

}

};

}

var spot = new DogConstructor(“Spot”);

spot.respondTo(“Rover”); // nope

spot.respondTo(“Spot”); // yeah!

那么,结果会怎样呢?暂时忽略DogConstructor 函数定义,看一看这一行:

var spot = new DogConstructor(“Spot”);

“new”运算符执行的操作很简单。首先,它创建一个新的空对象。然后执行紧随其后的函数调用,将新的空对象设置为该函数中“this”的值。换句话说,可以认为上面这行包含“new”运算符的代码与下面两行代码的功能相当:

// create an empty object

var spot = {};

// call the function as a method of the empty object

DogConstructor.call(spot, “Spot”);

正如在DogConstructor 主体中看到的那样,调用此函数将初始化对象,在调用期间关键字“this”将引用此对象。这样,就可以为对象创建模板!只要需要创建类似的对象,就可以与构造函数一起调用“new”,返回的结果将是一个完全初始化的对象。这与类非常相似,不是吗?实际上,在JavaScript 中构造函数的名称通常就是所模拟的类的名称,因此在上面的示例中,可以直接命名构造函数Dog:

// Think of this as class Dog

function Dog(name) {

// instance variable

https://www.wendangku.net/doc/f83610398.html, = name;

// instance method? Hmmm...

this.respondTo = function(name) {

if(https://www.wendangku.net/doc/f83610398.html, == name) {

alert(“Woof”);

}

};

}

var spot = new Dog(“Spot”);

在上面的Dog 定义中,我定义了名为name 的实例变量。使用Dog 作为其构造函数所创建的每个对象都有它自己的实例变量名称副本(前面提到过,它就是对象词典的条目)。这就是希望的结果。毕竟,每个对象都需要它自己的实例变量副本来表示其状态。但如果看看下一行,就会发现每个Dog 实例也都有它自己的respondTo 方法副本,这是个浪费;您只需要一个可供各个Dog 实例共享的respondTo 实例!通过在Dog 以外定义respondTo,可以避免此问题,如下所示:

function respondTo() {

// respondTo definition

}

function Dog(name) {

https://www.wendangku.net/doc/f83610398.html, = name;

// attached this function as a method of the object

this.respondTo = respondTo;

}

这样,所有Dog 实例(即用构造函数Dog 创建的所有实例)都可以共享respondTo 方法的一个实例。但随着方法数的增加,维护工作将越来越难。最后,基本代码中将有很多全局函数,而且随着“类”的增加,事情只会变得更加糟糕(如果它们的方法具有相似的名称,则尤甚)。但使用原型对象可以更好地解决这个问题,这是下一节的主题。

原型

在使用JavaScript 的面向对象编程中,原型对象是个核心概念。在JavaScript 中对象是作为现有示例(即原型)对象的副本而创建的,该名称就来自于这一概念。此原型对象的任何属性和方法都将显示为从原型的构造函数创建的对象的属性和方法。可以说,这些对象从其原型继承了属性和方法。当您创建如下所示的新Dog 对象时:

var buddy = new Dog(“Buddy“);

buddy 所引用的对象将从它的原型继承属性和方法,尽管仅从这一行可能无法明确判断原型来自哪里。对象buddy 的原型来自构造函数(在这里是函数Dog)的属性。

在JavaScript 中,每个函数都有名为“prototype”的属性,用于引用原型对象。此原型对象又有名为“constructor”的属性,它反过来引用函数本身。这是一种循环引用,图 1 更好地说明了这种循环关系。

图 1 每个函数的原型都有一个Constructor 属性

现在,通过“new”运算符用函数(上面示例中为Dog)创建对象时,所获得的对象将继承Dog.prototype 的属性。在图 1 中,可以看到

Dog.prototype 对象有一个回指Dog 函数的构造函数属性。这样,每个Dog 对象(从Dog.prototype 继承而来)都有一个回指Dog 函数的构造函数属性。图 2 显示了构造函数、原型对象以及用它们创建的对象之间的这一关系。

var spot = new Dog(“Spot”);

// Dog.prototype is the prototype of spot

alert(Dog.prototype.isPrototypeOf(spot));

// spot inherits the constructor property

// from Dog.prototype

alert(spot.constructor == Dog.prototype.constructor);

alert(spot.constructor == Dog);

// But constructor property doesn’t belong

// to spot. The line below displays “false”

alert(spot.hasOwnProperty(“constructor”));

// The constructor property belongs to Dog.prototype // The line below displays “true”

alert(Dog.prototype.hasOwnProperty(“constructor”));

图 2 实例继承其原型

某些读者可能已经注意到代码中对hasOwnProperty 和isPrototypeOf 方法的调用。这些方法是从哪里来的呢?它们不是来自Dog.prototype。实际上,在Dog.prototype 和Dog 实例中还可以调用其他方法,比如toString、toLocaleString 和valueOf,但它们都不来自Dog.prototype。您会发现,就像 .NET Framework 中的System.Object 充当所有类的最终基类一样,JavaScript 中的Object.prototype 是所有原型的最终基础

原型。(Object.prototype 的原型是null。)

在此示例中,请记住Dog.prototype 是对象。它是通过调用Object 构造函数创建的(尽管它不可见):

Dog.prototype = new Object();

因此,正如Dog 实例继承Dog.prototype 一样,Dog.prototype 继承Object.prototype。这使得所有Dog 实例也继承了Object.prototype 的方法和属性。

每个JavaScript 对象都继承一个原型链,而所有原型都终止于Object.prototype。注意,迄今为止您看到的这种继承是活动对象之间的继承。它不同于继承的常见概念,后者是指在声明类时类之间的发生的继承。因此,JavaScript 继承动态性更强。它使用简单算法实现这一点,如下所示:当您尝试访问对象的属性/方法时,JavaScript 将检查该属性/方法是否是在该对象中定义的。如果不是,则检查对象的原型。如果还不是,则检查该对象的原型的原型,如此继续,一直检查到Object.prototype。图 3 说明了此解析过程。

图 3 在原型链中解析toString() 方法JavaScript 动态地解析属性访问和方法调用的方式产生了一些特殊效果:

继承原型对象的对象上可以立即呈现对原型所做的更改,即使是在创建这些对象之后。

如果在对象中定义了属性/方法X,则该对象的原型中将隐藏同名的属性/方法。例如,通过在Dog.prototype 中定义toString 方法,可以改写Object.prototype 的toString 方法。

更改只沿一个方向传递,即从原型到它的派生对象,但不能沿相反方向传递。代码说明了这些效果。显示了如何解决前面遇到的不需要的方法实例的问题。通过将方法放在原型内部,可以使对象共享方法,而不必使每个对象都有单独的函数对象实例。在此示例中,rover 和spot 共享getBreed 方法,直至在spot 中以任何方式改写toString 方法。此后,spot 有了它自己版本的getBreed 方法,但rover 对象和用新GreatDane 创建的后续对象仍将共享在GreatDane.prototype 对象中定义的那个getBreed 方法实例。

function GreatDane() { }

var rover = new GreatDane();

var spot = new GreatDane();

GreatDane.prototype.getBreed = function() {

return “Great Dane”;

};

// Works, even though at this point

// rover and spot are already created.

alert(rover.getBreed());

// this hides getBreed() in GreatDane.prototype

spot.getBreed = function() {

return “Little Great Dane”;

};

alert(spot.getBreed());

// but of course, the change to getBreed

// doesn’t propagate back to GreatDane.prototyp e

// and other objects inheriting from it,

// it only happens in the spot object

alert(rover.getBreed());

静态属性和方法

有时,您需要绑定到类而不是实例的属性或方法,也就是,静态属性和方法。在JavaScript 中很容易做到这一点,因为函数是可以按需要设置其属性和方法的对象。由于在JavaScript 中构造函数表示类,因此可以通过在构造函数中设置静态方法和属性,直接将它们添加到类中,如下所示:

function DateTime()

// set static method now()

DateTime.now = function() {

return new Date();

};

alert(DateTime.now());

javaScript练习题

JS练习题 JS练习题 (1) 一、选择题 (2) 二、不定项选择题 (7) 三、填空 (8) 四、判断 (9) 五、阅读程序写结果 (10) 六、程序题 (12) 七、设计题 (15)

一、选择题 1、写“Hello World”的正确javascript语法是?() A. document.write("Hello World") B. "Hello World" C. response.write("Hello World") D. ("Hello World") 2、JS特性不包括() A.解释性 B.用于客户端 C.基于对象 D.面向对象 3、下列JS的判断语句中( )是正确的 A.if(i==0) B.if(i=0) C.if i==0 then D.if i=0 then 4、下列JavaScript的循环语句中( )是正确的 A.if(i<10;i++) B.for(i=0;i<10) C.for i=1 to 10 D.for(i=0;i<=10;i++) 5、下列的哪一个表达式将返回假() A.!(3<=1) B.(4>=4)&&(5<=2) C.(“a”==”a”)&&(“c”!=”d”) D.(2<3)||(3<2) 6、下列选项中,( )不是网页中的事件 A.onclick B.onmouseover C.onsubmit D.onpressbutton 7、有语句“var x=0;while(____) x+=2;”,要使while循环体执行10次,空白处的循环判定式应写为:() A.x<10 B. x<=10 C.x<20 D.x<=20 8、JS语句 var a1=10; var a2=20; alert(“a1+a2=”+a1+a2) 将显示( )结果 A.a1+a2=30 B.a1+a2=1020 C.a1+a2=a1+a2 9、将字串s中的所有字母变为小写字母的方法是() A.s.toSmallCase() B.s.toLowerCase() C.s.toUpperCase() D.s.toUpperChars() 10、以下( )表达式产生一个0~7之间(含0,7)的随机整数. A.Math.floor(Math.random()*6) B.Math.floor(Math.random()*7) C.Math. floor(Math.random()*8) D.Math.ceil(Math.random()*8) 11、产生当前日期的方法是() A.Now(); B.Date() C.new Date() D.new Now() 12、如果想在网页显示后,动态地改变网页的标题() A.是不可能的 B.通过document.write(“新的标题容”) C. 通过document.title=(“新的标题容”) D. 通过document.changeTitle(“新的标题容”) 13、某网页中有一个窗体对象,其名称是mainForm,该窗体对象的第一个元素是按钮,其名称是myButton,表述该按钮对象的方法是()

js基础测试题

1、分析下段代码输出结果是() var arr = [2,3,4,5,6]; var sum =0; for(var i=1;i < ;i++) { sum +=arr[i] } (sum); A.20 B.18 C.14 D.12 2、以下关于 Array 数组对象的说法不正确的是() A.对数组里数据的排序可以用 sort 函数,如果排序效果非预期,可以给 sort 函数加一个排序函数的参数 B.reverse 用于对数组数据的倒序排列 C.向数组的最后位置加一个新元素,可以用 pop 方法 D.unshift 方法用于向数组删除第一个元素 3、以下代码运行的结果是输出( ) var a = b = 10; (function(){ var a=b=20 })(); (b); A.10 B.20 C.报错 D.undefined

4、以下代码运行后的结果是输出( ) var a=[1, 2, 3]; ()); A.123 B.1,2,3 C.1 2 3 D.[1,2,3] 5、在 JS 中,’1555’+3 的运行结果是( ) A.1558 B.1552 C.15553 D.1553 6、以下代码运行后弹出的结果是( ) var a = 888; ++a; alert(a++); A.888 B.889 C.890 D.891 7、关于变量的命名规则,下列说法正确的是() A.首字符必须是大写或小写的字母,下划线(_)或美元符($)B.除首字母的字符可以是字母,数字,下划线或美元符 C.变量名称不能是保留字 D.长度是任意的 E.区分大小写

8、下列的哪一个表达式将返回值为假() A.!(3<=1) B.(4>=4)&&(5<=2) C.(“a”==“a”)&&(“c”!=“d”) D.(2<3)||(3<2) 9、下面代码,k的运行结果是() var i = 0,j = 0; for(;i<10,j<6;i++,j++){ k = i + j; } A.16 B.10 C.6 D.12 10、var x = 1; function fn(n){n = n+1}; y = fn(x); y 的值为()A.2 B.1 C.3 D.undefined 11、[1,2,3,4].join("0").split("") 的执行结果是() A."1,2,3,4" B.[1,2,3,4] C.[“1”,“0”,“2”,“0”,“3”,“0”,“4”] D."1,0,2,0,3,0,4"

JS考试题目

(1)、JavaScript中声明一个变量所用的关键字是var。(2)看以下JavaScript程序 var a,b,c; a=“2”; b=2; c=a+b; 运行以上程序后,变量c的值为“22”。 (3)看以下JavaScript程序* var x,y; x=10; y=x++; 运行以上程序后,变量y的值为10 。 (4)看以下JavaScript程序** var i,j; i=0; j=i&&(++i); 运行以上程序后,变量j的值为 0 。 (5)看以下JavaScript程序* var i; i=8; do{ i++; }while(i>100); 运行以上程序后,变量i的值为9 。 (6)看以下JavaScript程序* for(var i=1;i<=10;i++){

if(i= =5) continue; if(i= =8) break; alert(i); } 运行以上程序后,弹出的对话框依次输出的值为1,2,3,4,6,7。 (7)看以下JavaScript程序 var str1,str2,str3,str4; str1=""; str2="8"; str3=str1+str2; alert(str3); str4=Number(str1)+Number(str2); alert(str4); 运行以上程序后,弹出的对话框依次输出的值为 , 。(8)定义JavaScript函数所用的关键字是function。 (1)alert();的作用是:( A ) A、弹出对话框,该对话框的内容是该方法的参数内容。 B、弹出确认对话框,该对话框的要用户选择“确认”或“取消”。 C、弹出输入对话框,该对话框的可让用户输入内容。 D、弹出新窗口。 (2)看以下JavaScript程序 var num; num=5+true; 问:执行以上程序后,num的值为(D)

js基础知识

Js1k:用1k的代码做出炫目的效果。代码扩写 犀牛书 微信公众号:前端大全 1. ***变量 2. ***数据类型 一.***变量:内存中存储*一个*数据的存储空间,再起一个名字 何时使用:程序中反复使用的数据,都要先保存在变量中,再参与运算 如何使用:声明赋值取值 1. 声明:在内存中创建一个新变量 如何声明:var 变量名; 仅声明,但暂未赋值,默认值为undefined 变量命名:1. 不能以数字开头,仅能包含字母,数字和下划线 2. 不能用保留字:js中已经预先使用的关键字 比如:name X 3. 见名知意 4. 驼峰命名:第一个单词首字母小写, 之后每个单词首字母大写: 比如:backgroundColor,listStyleType 2. 赋值:将等号*右边*的数据,保存到等号*左边*的变量中 如何赋值:变量名=值;il *对已经包含值的变量赋新值,新值会替换旧值* 建议:1. 在声明同时,初始化变量的值 如何在声明同时初始化:var 变量名=值; 3. 取值:只要使用变量名,在运行时,会被自动替换为变量中的值 特殊情况:3种: 1. 只声明,但未赋值的变量,可任意使用 比如:var hb; console.log(hb); //undefined 2. 从未声明的变量,不能使用(取值)! 报错:ReferenceError: XXX is not defined 3. 未声明的变量,却可赋值!——其实和var不一样 强烈建议:必须用var声明变量 ***声明提前:在程序正式*执行前*,都会将var声明的变量提前到*当前脚本块*的顶部集中声明。再开始执行程序。***赋值留在原地*** 常量:一旦初始化,值不能改变的量 何时使用:程序中,一旦定义不可擅自改变的值,都要用常量保存 如何创建:const 常量名=值; 用作常量的名称,都要大写字母 强行修改常量的值,不会报错,但也无法修改成功!

js基础测试题

一、选择题(每题 2 分,多选题错选、少选不得分) 1、分析下段代码输出结果是() var arr = [2,3,4,5,6]; var sum =0; for(var i=1;i < arr.length;i++) { sum +=arr[i] } console.log(sum); A.20 B.18 C.14 D.12 2、以下关于Array 数组对象的说法不正确的是() A.对数组里数据的排序可以用sort 函数,如果排序效果非预期,可以给sort 函数加一个排序函数的参数 B.reverse 用于对数组数据的倒序排列 C.向数组的最后位置加一个新元素,可以用pop 方法 D.unshift 方法用于向数组删除第一个元素

3、以下代码运行的结果是输出( ) var a = b = 10; (function(){ var a=b=20 })(); console.log(b); A.10 B.20 C.报错D.undefined 4、以下代码运行后的结果是输出( ) var a=[1, 2, 3]; console.log(a.join()); A.123 B.1,2,3 C.1 2 3 D.[1,2,3] 5、在JS 中,’1555 ’+3 的运行结果是( )

A.1558 B.1552 C.15553 D.1553 6、以下代码运行后弹出的结果是( ) var a = 888; ++a; alert(a++); A.888 B.889 C.890 D.891 7、关于变量的命名规则,下列说法正确的是() A.首字符必须是大写或小写的字母,下划线(_)或美元符($ )B.除首字母的字符可以是字母,数字,下划线或美元符 C.变量名称不能是保留字 D.长度是任意的 E.区分大小写

JavaScript期末测试题

1、选择题:9题 1、要求用JavaScript实现下面的功能:在一个文本框中内容发生改变后,单击页面的其他部分将弹出一个消息框显示文本框中的内容,下面语句正确的是() A. B. C. D. 正确答案是: B 2、在HTML页面中,下面关于Window对象的说法不正确的是()。 A.Window对象表示浏览器的窗口,可用于检索有关窗口状态的信息 B.Window对象是浏览器所有内容的主容器 C.如果文档定义了多个框架,浏览器只为原始文档创建一个Window对象,无须为每个框架创建Window对象 D.浏览器打开HTML文档时,通常会创建一个Window对象 正确答案是: C 3、window的哪个方法可以显示输入对话框?() A.confirm() B.alert() C.prompt() D.open() 正确答案是: C 4、open()方法的哪个外观参数可以设置是否显示滚动条?() A.location B.menubar C.scrollbars D.toolbar 正确答案是: C 5、在Javascript语言中,当元素失去了焦点时激发的事件是( ) A.Focus B.UnLoad C.MouseOver D.Blur 正确答案是: D 6、DHTML不具备的优点是() A.动态样式 B.动态语法 C.动态内容 D.动态定位

零基础js入门试题

零基础js入门试题

————————————————————————————————作者:————————————————————————————————日期:

1,什么是Javascript? 答:Javascipt是一种脚本语言,由web浏览器进行解释和执行。 2,JavaScript是由那几个部分组成? 答:主要分为以下三种: ECMAScript : 核心 DOM : 文档对象模型 BOM : 浏览器对象模型 3,请写出两种将Javascript的应用到网页的方式 答: 方法一:将javascript代码插入html文档部分的 方法二:将javascript代码存放在一个独立的文件。用.js作为文件的扩展名,再利用 4,如何定义一个变量?变量的命名规则有哪些? 答:变量由var 运算符加变量名定义,如: var num = 24; var name= ‘金团网’; 命名规则第一个字符必须是字母、下划线(_)、或美元符号($); 变量名中不能包含空格或标点符号($ 除外); 变量名区分大小写; 不能使用保留字; 为了让变量名有更好的可读性,可以在变量名中适当的插入下划线分隔,如:var my_name = ‘金团网’; 5,Javascript的常用的几种数据类型有哪些?

JS基础阶段考试试题

H5-JS基础试题姓名:班级:成绩: 一、单选题(每小题1分,20小题,共60分) 1、null,undefined,”瑳楲杮,20,true和false的共同点是() A、都是对象 B、都有相同的实例属性 C、都是原始值 D、都是函数 2、下列哪个正确的引入了myScript.js() A、 A、优秀 B、良好 C、及格 D、不及格 JavaScript中,有一个id为flower的复选框,下面的正确获取flower的选中情况(A) A、document.getElementByld(“flower”).checked; B、document,getElementByld(“flower”),selected; C、document.getElementByName(“flower”).checked; D、document.getElementByName(“flower”),selected; 下列标签中,属于块级元素的是(C、D)。(选择二项) A、span标签 B、strong标签 C、dt标签 D、p标签 下列选项中,标签选择器是(A)。 A、strong{color:#333333;font-size;12px} B、#strong{color;#333333;font-size;12px} C、Class{color;#333333;font-size;12px} D、.strong{color;#333333;font-size;12px} 8、在JavaScript中,下列选项声明变量并赋值得方式错误的是(B、D)。 A、varcoumt=10 B、varcoumt==10; C、var x,y,z=10 D、var 1x=10;

js基础测试题

一、选择题(每题2分,多选题错选、少选不得分) 1、分析下段代码输出结果是() ? ? var arr = [2,3,4,5,6]; ? ? var sum =0; ? ? for(var i=1;i < arr.length;i++) { ? ? ? ? sum +=arr[i] ? ?} ? ? console.log(sum); A.20 ? ? B.18 ? ? C.14 ? ? D.12 2、以下关于Array 数组对象的说法不正确的是(?) A.对数组里数据的排序可以用sort 函数,如果排序效果非预期,可以给sort 函数加一个排序函数的参数 B.reverse 用于对数组数据的倒序排列 C.向数组的最后位置加一个新元素,可以用pop 方法 D.unshift 方法用于向数组删除第一个元素 3、以下代码运行的结果是输出( ?) ? ? var a = b = 10;

? ? (function(){ ? ? ? ? var a=b=20 ? ? })(); ? ? console.log(b); A.10 ? ? B.20 ? ? C.报错? ? D.undefined 4、以下代码运行后的结果是输出( ? ) ? var a=[1, 2, 3]; ? ? console.log(a.join()); A.123 ? ? B.1,2,3 ? ? C.1 ?2 ?3 ? ? D.[1,2,3] 5、在JS 中,’1555’+3 的运行结果是( ? ) A.1558 ? ? B.1552 ? ? C.15553 ? ? D.1553 6、以下代码运行后弹出的结果是( ? ) ? ? var a = 888; ? ? ++a; ? ? alert(a++);

上海市JS考试题题库

监理工程师考试题 、是非题: 1、建设工程监理是专业化、社会化的建设单位项目管理,所依据的基本理论和方法来 自建设项目管理学。(对) 2、建设工程监理的实施需要建设单位的委托和授权。(对) 3、仅委托施工阶段监理的工程,工程监理单位只能根据委托监理合同和施工合同对施 工行为实行监理。(对) 4、工程监理单位应当由组织管理能力强、工程建设经验丰富的人员担任领导;应当有 足够数量的、有丰富的管理经验和应变能力的监理工程师组成的骨干队伍,要积累足够的技术、经济资料和数据;要实事求是、创造性地开展工作。(对) 5、工程监理单位不能完全取代建设单位的管理活动。它不具有工程建设重大问题的决 策权,它只能在授权范围内代表建设单位进行管理。(对) 6、我国还特别要求监理工程师通过组织协调,使影响监理目标特别是进度目标实现的 各方主体有机配合,保证监理工作实施和运行过程顺利。(对) 7、上海市规定,凡实施准用证管理的建设工程材料,未按规定取得准用证的,本市建 设工程不得使用。(对) 8、在现场监理具体的运作中,应当始终抓住对施工合同的管理。(对) 9、旁站监理由现场监理人员负责具体实施。(对) 10、文件内容是作者单方面意志的表示,其规范作用的成立与实现不以对方是否同 意为前提条件,具有极强的强制约束力。(对) 11、在效用方面一般实行“不溯既往” 和“后法推翻前法”,即文件效力所及针 对正式成立(生效)之后发生的有关事物;新文件形成之后,与其规定不一致的“旧文件”即行废止,以新文件为准。(对) 12、从事建筑活动的专业人员,应当依法取得相应的执业资格证书,并在执业资格 证书许可的范围内从事建筑活动。(对) 13、工程监理人员认为工程设计不符合工程质量标准或者合同约定是质量要求的,应 当报告建设单位要求设计单位改正。(对) 14、工程监理人员认为工程施工不符合工程设计要求、施工技术标准和合同约定 的,有权要求建筑施工企业改正。(对) 15、监理规范是项目监理机构具体从事施工阶段监理工作的依据。(对) 16、项目监理机构应按委托监理合同的约定,配备满足监理工作需要的常规检测设 备和工具。(对) 17、工程监理单位年检结论分为合格、基本合格、不合格三种。(对) 18、工程监理企业资质条件中监理工程师注册人员数量、经营规模未达到资质标 准,但不低于资质等级标准的80%,其它各项均达到标准要求,并且在过去一年内未发生1)—8)行为。(对) 19、未按法律、法规以及有关技术标准和建设工程承包合同对施工质量实施监理的应 予以纪录。(对) 20、未取得准用证的建设工程材料(钢材、水泥、沙石、商品砼、预制砼构件、墙体 材料和管道、门、窗等结构性、功能性材料)不得用于本市建设工程。(对) 21、工程建成后在使用中保证结构安全、保证人身和环境免受危害的程度,均必须 保证人身财产、工程整体免遭工程结构破环及外来危害的伤害。(对) 22、影响工程质量的因素很多,即:人、材、机、法、环,在监理过程中应注意控 制。(对) 23、严禁无技术资质的人员上岗操作,以确保工程质量,杜绝安全事故。(错) 24、监理工程师既要对最终产品进行检查验收,又要对各环节及中间产品监督、检查

js基础第一次测试题(附答案)教学文案

JavaScript学期第一次测试题 本试题满分100分,100分钟完卷 一、选择题(每题2分,多选题错选、少选不得分) 1、分析下段代码输出结果是(B) var arr = [2,3,4,5,6]; var sum =0; for(var i=1;i < arr.length;i++) { sum +=arr[i] } console.log(sum); A.20 B.18 C.14 D.12 2、以下关于Function函数对象的说法不正确的是(D )A.函数可有可无返回值 B.调用函数时传递的参数是实参 C.函数调用时候,可以用一个变量来接收函数返回值D.函数必须要有形式参数

3、以下代码运行的结果是输出(B ) var a = b = 10; (function(){ var a=b=20 })(); console.log(b); A.10 B.20 C.报错D.undefined 4、以下代码运行后的结果是输出( A ) var a=new Object(); https://www.wendangku.net/doc/f83610398.html,=”admin” console.log(https://www.wendangku.net/doc/f83610398.html,); A.admin B.a C.“admin”D.[a] 5、在JS 中,’1555’+3 的运行结果是( C ) A.1558 B.1552 C.15553 D.1553

6、以下代码运行后弹出的结果是( B ) var a = 888; ++a; alert(a++); A.888 B.889 C.890 D.891 7、关于变量的命名规则,下列说法正确的是(ABCDE )A.首字符必须是大写或小写的字母,下划线(_)或美元符($)B.除首字母的字符可以是字母,数字,下划线或美元符 C.变量名称不能是保留字 D.长度是任意的 E.区分大小写 8、下列的哪一个表达式将返回值为假(B )

js基础语句(整理)

Javascript 1、document.write():输出语句 2、// 或者/* */:注释 3、%(余数)++(递增)--(递减):运算符 4、==(等于)!=(不等于)&&(与and)!(非)||(或):逻辑运算符 5、单项条件结构:if 条件语句 6、双向条件结构:if…else 条件语句 7、多项条件语句:switch 条件语句(case <条件> break <一个条件结束> default ) 8、循环语句: ①for 循环语句 ②for…in 循环语句(prop 为获取Object()里面的属性的代码) ③while 循环语句(while和for循环的不同之处在于,while循环没有内置的计数器或更新表达式,如果希望控制语句或语句块的循环执行,不只是通过“运行该代码nc次”这样简单的规则,而是需要更复杂的规则,则应该用while循环) ④do…while 循环语句,与while循环不同在于它总是至少运行一次,因为是在循环的 末尾检查条件,而不是在开头 9、中断一个循环的运行break :可用于switch、while、do…while;越过余下代码块而 直接跳到循环的下一次重复中continue :可用于for或者for…in (Break可以跳出整个循环,让循环中途停止,直接执行后面的代码,Continue跳过本次循环,而整个循环体继续执行) 10、①得到表单中元素的值document.getElementById(“ID”).value ②得到网页中元素的值document.getElementById("ID").innerHTML ③给表单中元素赋值document.getElementById(“ID”).value=”值” ③给网页中元素赋值document.getElementById(“ID”). innerHTML =”值” 11、function定义函数;rva定义变量 12、对话框:alert(警告框,包括ok按钮)、confirm(确认对话框,包括ok、cancel 按钮)、prompt(提示等待用户输入) 13、return语句调用函数就可以将这个返回值存储在变量中了。return=add2(3,4);该语句 执行后,result变量中的值为7(3+4)。值得说明的是,我们的函数中,参数和返回值都是数字,其实它们也可以是字符串等其它类型 14、try、catch用来调试一段可能出错的代码:try{ //要调试的代码} catch(e) { //如果出 现错误将会执行这个代码块} finally { //无论是否出错都会执行的代码} 15、特殊字符代码:\’单引号、\”双引号、\&与符号、\\反斜杠、\n换行 16、new Date()获取当前系统时间、getFullYear()获取当前时间的年份(4位,1970-????)、 getMonth()获取当前时间的月份(0-11,0代表1月)、getDate()获取当前时间的日份(1-31)、getDay()获取当前星期X(0-6,0代表星期天)、getHours()获取当前小时数(0-23)、getMinutes()获取当前分钟数(0-59)、getSeconds()获取当前秒数(0-59)、toLocaleDateString()获取当前日期(2015年8月13号)。 17、new Array() :定义一个数组;concat() 方法用于连接两个或多个数组(①var a=[1,2,3]; document.write(a.concat(4,5);把concat中的参数连接到组a中;②document.write(a.concat(b,c)用concat把数组a,b,c链接起来) 18、Number 把对象的值转化为数字 19、toFixed(num) toFixed() 方法可把Number 四舍五入为指定小数位数的数字,num,必需。

相关文档