汇智网重温JS
确认选择
除了向用户提供信息,我们还希望从用户那里获得信息。这里就用到了confirm 消息对话框。
语法:confirm(str);
参数说明:
str: 在消息对话框中要显示的文本,返回的是布尔值。当点击“确定”按钮时,会返回true,点击“取消”按钮时,返回的是false。
示例:
if(confirm("你有房有车有存款吗?")==true){ document.write("求包养"); }else{ document.write("努力吧,少年"); }
提示
有时候,不仅希望用户回答Yes/No。而是希望得到更特定的响应。这中情况我们可以利用prompt。
语法:prompt(str1, str2);
参数说明:
str1:要显示在消息对话框中的文本,不能修改
str2:文本框中的内容,可以修改
点击确定按钮,文本框中的内容将作为函数返回值,点击取消按钮将返回null。
var myName = prompt("输入您的名字"); if(myName != null && myName != ''){ document.write("welcome to " + myName); }else{ document.write("welcome to my friend."); }
打开新页面
在html页面中,有时我们需要跳转到新的页面中。这是时候就用到了open()。
语法:window.open(URL, 窗口名称);
参数说明:
URL:可选,打开窗口的网址或路径。如果省略了这个参数,或者它的值是空字符串,那么新窗口就不会显示任何文档。
窗口名称:可选,该字符串是一个由逗号分隔的特征列表,声明了被打开窗口的名称。可以是"_top"、"_blank"、"_selft"、"_parent"等。
- _blank 在新窗口显示目标网页
- _selft 在当前窗口显示目标网页
- _parent 框架网页中当前整个窗口位置显示目标网页
- _top 框架网页中在上部窗口中显示目标网页
function open_win() { window.open("http://www.baidu.com","_blank"); } open_win();
try...catch...语句
当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息。
try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句 try 和 catch 是成对出现的。
try { allert("Welcome guest!");\\这里是故意把alert单词写错 }catch(err) { txt="本页有一个错误。\n\n"; txt+="错误描述:" + err.message + "\n\n"; txt+="点击确定继续。\n\n"; alert(txt); }
throw 语句
throw 语句允许我们创建自定义错误。
正确的技术术语是:创建或抛出异常(exception)。
如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。
语法:throw exception
参数:exception 可以是 JavaScript 字符串、数字、逻辑值或对象。
function myFunc(){ try{ //这是是获取id为test的输入框中的值,详细用处会在DOM操作中讲解 var test = document.getElementById("test").value; if (x == ""){ throw "值为空"; } if (x > 5){ throw "值小了"; } if (x < 10){ throw "值大了"; } } catch (err){ alert("错误:" + err + "。"); } }
文档对象模型(Document Object Model简称DOM)
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树。

HTML文档可以说由节点构成的集合,三种常见的DOM节点:
- 元素节点:上图中<html>、<body>、<a>等都是元素节点,即标签。
- 文本节点:向用户展示的内容,如<title>...</title>中的“文档标题”文本。
- 属性节点:元素属性,如<a>标签的链接属性 href 。
改变属性:
document.getElementById(id).attribute=new value
改变CSS:
document.getElementById("p2").style.color="red";
数据类型分为:基础类型和对象类型。
基础类型:Number、String、Boolean、Null、Undefined
对象类型:object,包括Array、Function、Date...
在保存浮点数值时需要的内存空间是整数值的两倍,因此JavaScript在一些情况下会将 浮点数值转换为整数值。如下列情况:
- 小数点后面没有跟任何的数字;
- 本身表示的就是一个整数(像3.0)。
var floatN1 = 3.; //小数点后面没有数字,解析为3 var floatN2 = 3.0; //本身表示整数,解析为3
NaN:
NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它自己本身。我们可以用函数isNaN(number)检测NaN。
number参数可以是任意类型,而函数会帮我们确定这个参数是否“不是数值”。这个函数在接收一个值之后,会尝试将这个值转换为数值。而任何不能被转换为数值的值都会导致这个函数返回true。
alert(isNaN(NaN)); //true alert(isNaN(3)); //false(3是一个数值) alert(isNaN("3")); //false(可以被转换成数值3) alert(isNaN(true)); //false(被转换成数值1) alert(isNaN("bool")); //true(不能被转换成数值)
javascript使用以下八种转义字符,它们都是以反斜杠(\)开始。当JavaScript解析器看到反斜杠的时候,就会把程序员所要表达的意思表现出来。
| 序号 | 转义字符 | 使用说明 | 
| 1 | \b | 后退一格 | 
| 2 | \f | 换页 | 
| 3 | \n | 换行 | 
| 4 | \r | 返回 | 
| 5 | \t | 制表符 | 
| 6 | \' | 单引号 | 
| 7 | \" | 双引号 | 
| 8 | \ | 反斜杠 | 
任意的JavaScript的值都能转换为布尔值,如下图:
| 数据类型 | 转换为true的值 | 转换为false的值 | 
| Boolean | true | false | 
| String | 任何非空字符串 | ""(空字符串) | 
| Number | 任何非零数字值(包括无穷大) | 0和NaN | 
| Object | 任何对象 | null | 
| Undefined | 不适用 | undefined | 
Null和Undefined类型
Null和Undefined类型都只有唯一的特殊值,即null和undefined。不过null是关键字而undefined不是。
alert(null == undefined);//会弹出true。
尽管这两个值相等,但是它们的含义不同。undefined表示更深层次的“空值”,它是变量的一种取值,表明变量没有初始化。null 则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。所以:
alert(null === undefined);//会弹出false
你也可以认为undefined是表示系统级的、出乎意料的或类似错误的值的“空值”;而null表示程序级的、意料之中的值的“空值”。如果你想吧两者赋值给变量或者属性等,最好的选择是null
创建对象
对象(object)是JavaScript的基本数据类型之一。对象是一种复合值:它把多个值(原始值或者其他对象)聚合在一起,可以通过名字访问这些值。对象也可看做是 属性的无序集合,每个属性都是一个名/值对。属性名是字符串,因此我们可以把对象 看成是从字符串到值的映射。
创建对象的方式:
第一种是使用new操作符后跟object 构造函数,如下:
- var obj = new Object();
- obj.name = "MangGuo";
- obj.age = 25;
第二种方式是使用对象字面量表示法。如下创建了一个和上面一样的对象:
- var obj = {
- name : "MangGuo", //name是属性名,"MangGuo"是值
- age : 25
- }
在对象字面量中,使用逗号来分隔不同的属性,因此"mangGuo"后面是一个逗号。但是,在age属性的值25的后面不能添加逗号,因为age是这个对象的最后一个属性。
使用对象字面量创建对象需要注意:当属性名中含有空格、特殊字符或者是保留字的时候一定要加上引号,其他情况下可加可不加。如下
var obj = { "name" : "huizhi",<br> "hui zhi" : "hubwiz", //属性名中有空格 "hui-zhi" : "hubwiz", //属性名中有特殊字符 "for" : "baoliuzi" //属性名是保留字 } document.write(obj.name); //输出obj对象属性名为name的值
第三种方式是使用工厂模式创建对象,返回带有属性和方法的person对象。
第四种方式使用自定义构造函数模式创建对象;这里注意命名规范,作为构造函数的函数首字母要大写,以区别其它函数。这种方式有个缺陷是sayName这个方法,它的每个实例都是指向不同的函数实例,而不是同一个
第五种方式是使用原型模式创建对象;解决了方法4中提到的缺陷,使不同的对象的函数(如sayFriends)指向了同一个函数。但它本身也有缺陷,就是实例共享了引用类型friends,从下面的代码执行结果可以看到,两个实例的friends的值是一样的,这可能不是我们所期望的。
第六种方式是组合使用原型模式和构造函数创建对象,解决了方法5中提到的缺陷,而且这也是使用最广泛、认同度最高的创建对象的方法
参照:http://www.cnblogs.com/wangjq/p/3755691.html
访问属性
访问对象的属性有两种方式:点或者中括号操作符。点操作符在我们上一页当中已经应用到了。
1.使用点操作符
语法:objectName.propertyName
其中,objectName 为对象名称,propertyName为属性名称。
2.使用中括号操作符
语法:objectName[propertyName]
其中,objectName 为对象名称,propertyName 为属性名称。
删除属性
delete 操作符是删除属性的唯一方法。把属性设置为undefined或者null不能真正的删除属性,它只是移除了属性和值的关联。
语法:delete 对象名.属性名;
hasOwnProperty()函数
对象是属性的集合,我们经常会检测集合中成员的所属关系——判断某个属性是否属于某个对象。这个时候就用到了我们前文提到的:hasOwnProperty 函数。
语法:object.hasOwnProperty(proName);
参数说明:
object
为必需参数,是对象的实例。
proName
必需参数。 一个属性名称的字符串值
详解:如果object对象中存在指定名称的属性,则返回true,反之则返回false。
注:hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型的函数。
原型
每一个对象都连接到一个原型对象,并且可以从中继承属性。所有通过字面量创建 的对象都具有同一个原型对象,并可以通过Object.prototype获取对原型 对象的引用。通过new关键字后跟构造函数创建的对象的原型,就是构造函数的prototype 属性的值。
比如通过new Object()创建的对象和字面量创建的对象一样也继承自Object.prototype。
var sum = { name: "汇智网", type: "加法" } Object.prototype.add = function(){ alert("原型对象的方法"); } sum.add(); // =>原型对象的方法
遍历属性
我们除了检测属性的存在,我们还经常对属性进行遍历。通常我们会用:for/in
for / in 语句可用来遍历一个对象的所有属性名。它会将所有的属性(包括函数和原型中的属性)。如下代码:
创建数组
Array类型是Javascript中比较常用的类型,它和其他语言的数组有很大的区别,虽然它们数组的数据都是有序列表。但是JavaScript的数组可以保存任意类型的数据(包括它本身)。且大小是动态的,可以随着数据的添加而自动增长。
创建数组的两种方式:
第一种方式:使用Array构造函数
var arr = new Array();
如果知道数组中的数据,可以把数据包含到构造函数中。比如:
var arr = new Array("cat","dog","mouse");
如果数组中的数据只有一个且是数值时,用引号引起来length是1,不用引号的话数值是几就表示length是多少。比如:
var arr = new Array("3"); //创建了一个包含字符串是3的数组,length为1。 var arr = new Array(3); //创建了一个length为3的数组
第二种方式:使用字面量表示法
var arr = [];
上面创建了一个空数组,如果你知道其中的数据,可以如下使用:
var arr = ["cat", "dog", "mouse"];
稀疏数组
稀疏函数就是从0开始的不连续索引的数组。
通常情况下,数组中length属性值代表着元素的个数,那就是稀疏数组。就像上文中提到的。示例如下:
var arr = new Array(3); arr.length; // arr[0] = 1; arr[100] = 98; arr.length;
遍历数组
数组就是对象,所以我们可以用 for/in 来遍历数组。可惜 for/in 不能保证属性的顺序,但是大多数情况下都希望按照 阿拉伯数组顺序来产生元素。
要想解决这个问题,我们可以用最常规的 for 来遍历数组。如下示例:
函数声明和函数表达式
JavaScript解析器在向执行环境加载数据的时候,对函数声明和函数表达式并不是一视同仁的。 对于前者解析器会率先读取,并使其在执行任何代码之前可用;对于后者,则必须等到解析器执行 到它所在的代码行,才会真正被解析执行。看如下中的示例:
alert(sum(3,11)); //弹出14 function sum(x, y) { return x + y; }
alert(sum(3,11); // unexpected identifier 意外标识符错误 var sum = function (x, y) { return x + y; }
作为值的函数
JavaScript中的函数名本身就是变量,所以函数也可以作为值来使用。看如下示例:
function funcName(someFunc, someParam){ return someFunc(someParam) }
function funcName(someFunc, someParam){ return someFunc(someParam) } function sum(num){ return num + 3; } var result = funcName(sum, 5); alert(result); //=>8
函数调用
在JavaScript中有四种方式调用函数,如下:
- 1.方法调用模式;
- 2.函数调用模式;
- 3.构造器调用模式;
- 4.apply调用模式。
方法调用模式
当一个函数被保存为对象的一个属性时,我们称它为一个方法。如果调用表达式包含一个提取属性 的动作(即我们在讲解对象时说的 . 操作符),那么它就被当做一个方法来调用。
构造器调用模式
JavaScript中函数还可以是构造器. 将函数作为构造器来使用的语法就是在函数调用前面加上一个new关键字. 如以下代码:
var add = function() { this.name = "汇智网"; this.sum = function (a, b){ return a + b; } } // 构造器调用模式 var obj = new add(); //obj是一个对象 obj.sum(1,2); //=>3
apply调用模式
JavaScript中函数也是对象,也可以拥有方法。其中call()和apply()用来间接的调用函数。称之为apply调用模式。
apply方法让我们构建一个参数数组传递给调用函数。它也允许我们选择this的值。 apply方法接收两个参数,第一个是要绑定给this的值,第二个就是一个参数数组。
语法:函数名.apply(对象, 参数数组);
var add = function (a, b) { return a + b; } add.apply(null,[1,2]); //=>3

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号