JavaScript 是属于 HTML 和 Web 的编程语言。HTML 定义网页的内容,CSS 规定网页的布局,JavaScript 对网页行为进行编程。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
在 HTML 中,JavaScript 代码必须位于 与
标签之间。
例:
脚本可被放置与 HTML 页面的 或
部分中,可以在 HTML 文档中放置任意数量的脚本。
例:
一张网页
一个段落
把脚本置于 元素的底部,可改善显示速度,因为脚本编译会拖慢显示。
脚本可放置与外部文件中:
外部脚本很实用,如果相同的脚本被用于许多不同的网页。
JavaScript 文件的文件扩展名是 .js。
如需使用外部脚本,请在 标签的 src (source) 属性中设置脚本的名称:
例:
可通过完整的 URL 或相对于当前网页的路径引用外部脚本:
本例使用完整的 URL 来链接至脚本:
JavaScript 能够以不同方式“显示”数据:
如需访问 HTML 元素,JavaScript 可使用 document.getElementById(id) 方法。
id 属性定义 HTML 元素。innerHTML 属性定义 HTML 内容:
实例:
我的第一张网页
我的第一个段落
出于测试目的,使用 document.write() 比较方便:
我的第一张网页
我的第一个段落
在 HTML 文档完全加载后使用 document.write() 将删除所有已有的 HTML
使用警告框来显示数据:
我的第一张网页
我的第一个段落
在浏览器中,可使用 console.log() 方法来显示数据。
通过 F12 来激活浏览器控制台,并在菜单中选择“控制台”
实例:
我的第一张网页
我的第一个段落
JavaScript 的语法跟C语言,java,python等都有相似处,这里我只简单的介绍一下相关语法的使用。
JavaScript 是弱类型的语言,定义变量时跟python有些相似,不用声明变量类型。
JavaScript 使用 var 关键词来声明变量。
在本例中,x 被定义为变量。然后,x 被赋的值是 7:
var x;
x = 7;
在JavaScript中,声明变量时若没有对变量进行初始化,它的值将是 undefined。
在 JavaScript 中,没有值的变量,其值是 undefined。
var carName;
变量 carName 在这条语句执行后的值是 undefined。
任何变量均可通过设置值为 undefined 进行清空。其类型也将是 undefined。
person = undefined; // 值是 undefined,类型是 undefined
空值与 undefined 不是一回事。
空的字符串变量既有值也有类型。
JavaScript 变量能够保存多种数据类型:数值、字符串值、数组、对象等等:
var length = 7; // 数字
var lastName = "Gates"; // 字符串
var cars = ["Porsche", "Volvo", "BMW"]; // 数组
var x = {firstName:"Bill", lastName:"Gates"}; // 对象
JavaScript 拥有动态类型。这意味着相同变量可用作不同类型:
var x; // 现在 x 是 undefined
var x = 7; // 现在 x 是数值
var x = "Bill"; // 现在 x 是字符串值
如果对一个数和一个字符串相加,结果是字符串级联:
var x = 10;
var y = "20";
var z = x + y; // z 将是 1020(一个字符串)
在JavaScript中 == 和 === 两个比较运算符是不一样的。
JavaScript 函数通过 function 关键词进行定义,其后是函数名和括号 ()。
function name(参数 1, 参数 2, 参数 3) {
要执行的代码
}
实例
function myFunction(p1, p2) {
return p1 * p2; // 该函数返回 p1 和 p2 的乘积
}
JavaScript中函数的定义不需要指明返回值类型。
函数中的代码将在其他代码调用该函数时执行:
JavaScript 函数也可以使用表达式来定义。
函数表达式可以在变量中存储:
var x = function (a, b) {return a * b};
在变量中保存函数表达式之后,此变量可用作函数:
var x = function (a, b) {return a * b};
var z = x(4, 3);
函数表达式可以作为“自调用”。
自调用表达式是自动被调用(开始)的,在不进行调用的情况下。
函数表达式会自动执行,假如表达式后面跟着 ()。
需要在函数周围添加括号,以指示它是一个函数表达式:
(function () {
var x = "Hello!!"; //我会调用我自己
})();
上面的例子可以在不调用的情况下自动调用函数。
JavaScript 中的 typeof 运算符会为函数返回 “function”。
但是最好是把 JavaScript 函数描述为对象。
JavaScript 函数都有属性和方法。
arguments.length 会返回函数被调用时收到的参数数目:
function myFunction(a, b) {
return arguments.length;
}
toString() 方法以字符串返回函数:
function myFunction(a, b) {
return a * b;
}
var txt = myFunction.toString();
JavaScript 对象中的名称:值对被称为属性。
对象也可以有方法。
方法是在对象上执行的动作。
方法以函数定义被存储在属性中。
实例:
var person = {
firstName: "Bill",
lastName : "Gates",
id : 678,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
能够以两种方式访问属性:
objectName.propertyName 或 objectName[“propertyName”]
实例:
person.lastName;
person["lastName"];
通过如下语法访问对象方法:objectName.methodName()
实例:name = person.fullName();
HTML 事件是发生在 HTML 元素上的“事情”。
当在 HTML 页面中使用 JavaScript 时,JavaScript 能够“应对”这些事件。
HTML 事件可以是浏览器或用户做的某些事情。
下面是 HTML 事件的一些例子:
下面是一些常见的 HTML 事件:
事件 | 描述 |
---|---|
onchange | HTML 元素已被改变 |
onclick | 用户点击了 HTML 元素 |
onmouseover | 用户把鼠标移动到 HTML 元素上 |
onmouseout | 用户把鼠标移开 HTML 元素 |
onkeydown | 用户按下键盘按键 |
onload | 浏览器已经完成页面加载 |
事件处理程序可用于处理、验证用户输入、用户动作和浏览器动作:
在下面的例子中,onclick 属性(以及代码)被添加到 元素:
JavaScript 字符串是引号中的零个或多个字符。
var x = "Bill Gates"
原始值,比如“Bill Gates”,无法拥有属性和方法(因为它们不是对象)。
但是通过 JavaScript,方法和属性也可用于原始值,因为在执行方法和属性时 JavaScript 将原始值视为对象。
length 属性返回字符串的长度:
实例:
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length;
indexOf() 方法返回字符串中指定文本首次出现的索引(位置):
实例:
var str = "The full name of China is the People's Republic of China.";
var pos = str.indexOf("China");
search() 方法搜索特定值的字符串,并返回匹配的位置:
var str = "The full name of China is the People's Republic of China.";
var pos = str.search("locate");
indexOf() 与 search()区别在于:
在 JavaScript中,数组是一种特殊类型的对象。在 JavaScript 中对数组使用 typeof 运算符会返回 “object”。
所有数组也有属性和方法。
var x = cars.length; // length 属性返回元素的数量
var y = cars.sort(); // sort() 方法对数组进行排序
向数组添加新元素的最佳方法是使用 push() 方法:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Lemon"); // 向 fruits 添加一个新元素 (Lemon)
也可以使用 length 属性向数组添加新元素,即通过下标直接访问添加:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[fruits.length] = "Lemon"; // 向 fruits 添加一个新元素 (Lemon)
常见的问题是:我如何知晓某个变量是否是数组?
问题在于 JavaScript 运算符 typeof 返回 “object”。
为了解决这个问题,ECMAScript 5 定义了新方法 Array.isArray():
Array.isArray(fruits); // 返回 true
pop() 方法从数组中删除最后一个元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.pop(); // 从 fruits 删除最后一个元素("Mango")
pop() 方法返回“被弹出”的值:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = fruits.pop(); // x 的值是 "Mango"
push() 方法(在数组结尾处)向数组添加一个新的元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi"); // 向 fruits 添加一个新元素
push() 方法返回新数组的长度。
既然 JavaScript 数组属于对象,其中的元素就可以使用 JavaScript delete 运算符来删除:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
delete fruits[0]; // 把 fruits 中的首个元素改为 undefined
sort() 方法以字母顺序对数组进行排序:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort(); // 对 fruits 中的元素进行排序
reverse() 方法可以反转数组中的元素。
默认地,sort() 函数按照字符串顺序对值进行排序。
该函数很适合字符串(“Apple” 会排在 “Banana” 之前)。
不过,如果数字按照字符串来排序,则 “25” 大于 “100”,因为 “2” 大于 “1”。
正因如此,sort() 方法在对数值排序时会产生不正确的结果。
我们通过一个比值函数来修正此问题:
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
使用相同的技巧对数组进行降序排序:
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
JavaScript this 关键词指的是它所属的对象。
它拥有不同的值,具体取决于它的使用位置:
有不同的方法来创建对象:
在 ECMAScript 5 中,也可以通过函数 Object.create() 来创建对象。
创建对象最简单的方法:
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
使用 JavaScript 关键词 new创建对象:
下面的例子也创建了带有四个属性的新的 JavaScript 对象:
var person = new Object();
person.firstName = "Bill";
person.lastName = "Gates";
person.age = 50;
person.eyeColor = "blue";
通过对象构造器创建:
例如:
首先定义构造器
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
通过 new 关键词调用构造器函数可以创建对象:
var myFather = new Person("Bill", "Gates", 62, "blue");
JavaScript 提供用于原始对象的构造器:
var x1 = new Object(); // 一个新的 Object 对象
var x2 = new String(); // 一个新的 String 对象
var x3 = new Number(); // 一个新的 Number 对象
var x4 = new Boolean(); // 一个新的 Boolean 对象
var x5 = new Array(); // 一个新的 Array 对象
var x6 = new RegExp(); // 一个新的 RegExp 对象
var x7 = new Function(); // 一个新的 Function 对象
var x8 = new Date(); // 一个新的 Date 对象
访问对象属性的语法是:
objectName.property // person.age
或者:
objectName["property"] // person["age"]
或者:
objectName[expression] // x = "age"; person[x]
添加新属性:
假设 person 对象已存在,那么可以直接为其添加新属性:
person.nationality = "English";
删除属性
delete 关键词从对象中删除属性:
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
delete person.age; // 或 delete person["age"];