JS是脚本语言,脚本可被放置在 HTML 页面的 和
部分中,或者同时存在于两个部分中,亦或者放在外部文件(需要
)
JavaScript 可以通过不同的方式来输出数据:
可以在文本字符串中使用反斜杠对代码行进行换行
document.write("你好 \
世界!");
但不能
document.write \
("你好世界!");
var carname="Volvo";
var carname;
<script>
var x;
var y=1;
document.write(typeof y);//number
document.write("
");
y=null;
document.write(typeof y);//object
document.write("
");
document.write(typeof x);//undefined
var z=[1,2,3];
document.write("
");
document.write(typeof z);//object
</script>
var person={
firstname : "John",
lastname : "Doe",
id : 5566
};
对象属性有两种寻址方式:
name=person.lastname;
name=person["lastname"];
var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
var cars=new Array("Saab","Volvo","BMW");
var cars=["Saab","Volvo","BMW"];
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
<button onclick="myFunction('Harry Potter','Wizard')">点击这里</button>
<script>
function myFunction(name,job){
alert("Welcome " + name + ", the " + job);
}
</script>
<script>
function f1(x){
x=100;
}
function objectChange(o){
o.x=100;
}
var x=1;
f1(x);
document.write(x);//输出1
document.write("
");
var o1={
x:1,
y:2
};
objectChange(o1);
document.write(o1.x);//输出100
</script>
var x = function (a, b) {return a * b};
document.getElementById("demo").innerHTML = x;
//输出结果:function (a, b) {return a * b}
//这么调用
var z = x(4, 3);
以上函数实际上是一个 匿名函数,函数存储在变量中,不需要函数名称,通常通过变量名来调用。
(function () {
var x = "Hello!!"; // 我将调用自己
})();
function myFunction(a, b) {
return arguments.length;
}//arguments.length 属性返回函数接收到参数的个数。输出结果为:2
function myFunction(a, b) {
return a * b;
}
var txt = myFunction.toString();
//toString() 方法将函数作为一个字符串返回。输出结果:function myFunction(a, b) { return a * b; }
(参数1, 参数2, …, 参数N) => { 函数声明 }
这是最标准的写法,有更简洁的
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
function myFunction(x, y = 10) {
// 如果不传入参数 y ,则其默认值为 10
return x + y;
}
x = findMax(1, 123, 500, 115, 44, 88); //输出结果为500
function findMax() {
var i, max = arguments[0];
if(arguments.length < 2) return max;
for (i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // 返回 20
function myFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray); // 返回 20
两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)
在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。
在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。
carname="Volvo";
String(123) // 将数字 123 转换为字符串并返回
(123).toString()
Number("3.14") // 返回 3.14
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
/正则表达式主体/修饰符(可选)
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);//i是一个修饰符,指明搜索不区分大小写,结果为6
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");//输出为Visit Runoob!
修饰符
修饰符 | 描述 |
---|---|
i | 执行大小写不敏感的匹配 |
g | 执行全局匹配 |
m | 执行多行匹配 |
正则表达式模式
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[0-9] | 查找任何从 0 至 9 的数字。 |
元字符 | 描述 |
---|---|
\d | 查找数字。 |
\s | 查找空白字符。 |
\b | 匹配单词边界。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。 |
n* | 匹配任何包含零个或多个 n 的字符串。 |
n? | 匹配任何包含零个或一个 n 的字符串。 |
var patt = /e/;
patt.test("The best things in life are free!");//输出为true
//也可以合并
/e/.test("The best things in life are free!")
/e/.exec("The best things in life are free!");//输出为 e
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
JavaScript 只有声明的变量会提升,初始化的不会。
尽量在头部声明变量。
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // 报错
"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14; // 报错
function f(){
return !this;
}
// 返回false,因为"this"指向全局对象,"!this"就是false
function f(){
"use strict";
return !this;
}
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。
function f(){
"use strict";
this.a = 1;
};
f();// 报错,this未定义
HTML 表单验证可以通过 JavaScript 来完成。
//以下实例代码用于判断表单字段(fname)值是否存在, 如果不存在,就弹出信息,阻止表单提交
<html>
<head>
<meta charset="utf-8">
<script>
function validateForm() {
var x = document.forms["myForm"]["fname"].value;
if (x == null || x == "") {
alert("需要输入名字。");
return false;
}
}
script>
head>
<body>
<form name="myForm" action="demo_form.php"
onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
form>
body>
html>
//验证输入的数字
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>JavaScript 验证输入</h1>
<p>请输入 1 到 10 之间的数字:</p>
<input id="numb">
<button type="button" onclick="myFunction()">提交</button>
<p id="demo"></p>
<script>
function myFunction() {
var x, text;
// 获取 id="numb" 的值
x = document.getElementById("numb").value;
// 如果输入的值 x 不是数字或者小于 1 或者大于 10,则提示错误 Not a Number or less than one or greater than 10
if (isNaN(x) || x < 1 || x > 10) {
text = "输入错误";
} else {
text = "输入正确";
}
document.getElementById("demo").innerHTML = text;
}
</script>
</body>
</html>
HTML 表单验证也可以通过浏览器来自动完成。如果表单字段 (fname) 的值为空, required 属性会阻止表单提交:
<body>
<form action="demo_form.php" method="post">
<input type="text" name="fname" required="required">
<input type="submit" value="提交">
form>
<p>点击提交按钮,如果输入框是空的,浏览器会提示错误信息。p>
body>
<script>
// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改属性:
car.color = "red";
// 添加属性
car.owner = "Johnson";
// 显示属性
document.getElementById("demo").innerHTML = "Car owner is " + car.owner;
</script>
//输出:Car owner is Johnson
但是我们不能对常量对象重新赋值:
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; // 错误
数组也是相同:
// 创建常量数组
const cars = ["Saab", "Volvo", "BMW"];
// 修改元素
cars[0] = "Toyota";
// 添加元素
cars.push("Audi");
但是我们不能对常量数组重新赋值:
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // 错误