HTML5 原生的表单验证默认是针对 form 表单的请求行为的,但是有时候我们在发送 ajax 请求时也需要用到原生表单的验证功能,具体例子如下:
1 | <form onsubmit="return false;" id="myform"> //绑定 onsubmit 事件阻止原生表单请求 |
HTML5 原生的表单验证默认是针对 form 表单的请求行为的,但是有时候我们在发送 ajax 请求时也需要用到原生表单的验证功能,具体例子如下:
1 | <form onsubmit="return false;" id="myform"> //绑定 onsubmit 事件阻止原生表单请求 |
变量的作用域
作用域分为全局作用域和局部作用域,因为 JS 里没有块级作用域的概念,所以所谓的局部作用域是指函数内部的作用域,因为 JS 里函数外部是无法访问到函数内部的变量的,而函数内部却可以访问函数外部的变量,由此形成了局部作用域。
这里要注意一点,声明变量的时候一定要带上 var 关键字,如果没有 var 关键字则默认声明一个全局变量1
2
3
4
5
6
7
8
9
10var n = 1;
function func1(){
console.log(n);
}
func1();//输出1
function func2(){
var n = 1;
}
console.log(n); //undefined
this 是 JavaScript 的一个关键字,它表示函数在运行的时候所处的执行环境,this 的值会随着执行环境的不同动态变化,总的来说,this 指的是当前调用函数的那个对象。我们常在一下几种情况下使用 this:
纯函数调用
在纯函数调用的情况下,this 指向全局环境:1
2
3
4
5
6var a = 1; //定义全局变量
function getA() {
var a = 2; //这里是一个局部变量
console.log(this.a);
}
getA(); //输出 1
BOM 即是浏览器对象模型(Browser Object Model),它定义了 JavaScript 可以进行操作的浏览器的各个功能部件的接口,提供访问文档各个功能部件(如窗口本身、屏幕功能部件、浏览历史记录等)的途径以及操作方法。遗憾的是,BOM只是JavaScript脚本实现的一部分,没有任何相关的标准,每种浏览器都有自己的 BOM 实现,这是 BOM 最大的缺陷,在浏览器 JavaScript 中,BOM 主要有以下几个功能:
◆关闭、移动浏览器及调整浏览器窗口大小;
◆弹出新的浏览器窗口;
◆提供浏览器详细信息的定位对象;
◆提供载入到浏览器窗口的文档详细信息的定位对象;
◆提供用户屏幕分辨率详细信息的屏幕对象;
◆提供对cookie的支持;
◆加入ActiveXObject类扩展BOM,通过JavaScript实例化ActiveX对象。
之前说到了创建对象的几种方法,所以决定在这里讲讲对象继承的几种方法,两者有所共通,如果这里的文章有何不解可以参考前一篇文章 JavaScript 学习笔记之创建对象的几种方法。
原型链
在讲继承之前先来说一下关于原型链的事情,JavaScript 是依靠原型链来实现继承的,之前讲过构造函数,原型与实例之间的关系:每一个构造函数都会有一个自己的原型对象比如 Object.prototype,构造函数用一个内部属性 [[prototype]] 指向该原型对象;原型对象包含一个指向构造函数的指针 constructor;而每一个实例也都有一个指向原型对象的内部指针 proto。假设当前构造函数 A 的原型对象 A.prototype 等于另一个构造函数 B 的实例的话,那么此时 A.prototype 内部将会有一个指向构造函数 B 的原型对象 B.prototype 的指针,B.prototype 里也会有指向构造函数 B 的指针(因为刚才说了每一个实例都会有一个指向原型对象的内部指针 proto,所以如果我当前这个原型对象 A.prototype 是另一个构造函数 B 的实例的话它就有了双重身份了,也就是说这个原型对象 A.prototype 它现在既是一个原型对象也是一个实例,既然是构造函数 B 的实例,就一定会有一个指向 B.prototype 的指针,相应地,在 B.prototype 里面也会包含着一个指向构造函数 B 的指针)。同样的,如果此时 B.prototype 又是另外一个原型的实例的话,上述关系也依然成立,这样一直延续下去,就构成了一条原型链。用图表示出来就是这样:
在 JavaScript 中,创建对象有几种方法,我们平时最常用的是用 Object 构造函数和对象字面量:1
2
3
4
5
6
7
8
9
10// Object 构造函数方法
var person = new Object();
person.name = "Sibarone";
person.age = "19";
//对象字面量方法
var person = {
name: "Sibarone",
age: 19;
};
由于JavaScript的数据分为‘原始类型’和‘引用类型’,数组Array是引用类型,与c语言类似,对数组直接用‘=’号赋值的话,赋给变量的值只是该数组的引用地址(c语言中叫指针),并没有实现数组数据的拷贝,两个数组共享同一组数据,也就是说一旦修改这两个数组中的任何一方,该修改也会在另一方体现出来。具体代码如下:
最近给系统升级,诸多问题陆续出现,首先Ubuntu14.10桌面版无法使用U盘启动,这里与问题无关暂且不表,但是也建议大家少用U盘安装。