‘学习地址’
HTML定义了网页的内容
css描述了网页的布局
JavaScript控制了网页的行为
JavaScript是互联网上流行的脚本语言,这门语言可以用于HTML和web,更可以广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。ECMA-262 是JavaScript标准的官方名称
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Titletitle>
<body>
<h1>我的第一个标题h1>
<p id="demo">我的第一个段落p>
<script>
document.getElementById("demo").innerHTML = "段落已修改。";
script>
body>
html>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Titletitle>
<body>
<h1>我的第一个标题h1>
<p id="demo">我的第一个段落p>
<button onclick="myfunction()">点击运行JavaScriptbutton>
<script>
function myfunction(){
document.write(Date());
}
script>
body>
html>
- JavaScript是一个脚本语言,是一个轻量级,但功能强大的编程语言
- 在编程语言中,一般固定值称为字面量,如数字字面量3.14,123e5(科学计数e)
var x, length; x = 5; length = 6;
(5 + 6) * 10
//
来单行注释, /*……*/
多行注释document.getElementById('demo').innerHTML = '你好BOY';
是将html中id='demo’的元素输出文本”你好BOY“var x, y, z=1
其中x, y为undefined,z=1var x = 1;var x
依次执行后,x的值仍为1cars = null
var person={firstname:"John", lastname:"Doe", id:5566};
person有三个属性:firstname、lastname、idvar car = {name:"Fiat", model:500, color:"white"};
3个值赋值给car,一辆汽车是一个对象。对象有它的属性,如名字、型号、颜色等,方法有启动停止等;通过car.name;
或者car['name']
获取到 name 的 value 值()
调用(作为一个函数)var person = {
firstName: "John",
lastName: "Doe",
id: 5566,
fullName: function(){
return this.firstName + " " + this.lastName;}
}
name = person.fullName(); // 返回结果-->John Doe
// 该实例访问了person对象的fullName()方法
name1 = person.fullNmae; // 返回的是函数定义function(){……}
- 函数是由事件驱动的或者当他被调用时执行的可重复使用的代码块
- 函数就是包裹在花括号中的代码块,前面使用了关键词function
- 调用函数时会执行函数内代码
- 可以在某事件发生时直接调用函数(当用户点击按钮时),并且可由JavaScript在任何位置上进行调用。
carname = "Volvo"
将声明widow的一个属性carname
var x = 1; // 不可配置全局属性
y = 2; //没有使用var声明,可配置全局属性
console.log(this.x); // 1
console.log(window.x); // 1
console.log(window.y); // 2
delete x; // false 无法删除
console.log(x); // 1
delete y;
console.log(delete y); // true
console.log(y); //已经删除 报错变量未定义
var character = carname[7];
字符串的索引从 0 开始
var x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = x.length;
var firstName = new String("John")
var x = "John";
var y = new String("John");
(x === y) // 结果为 false,因为 x 是字符串,y 是对象
原始字符串,‘John’,没有属性和方法(他们不是对象)
原始值可以使用 JavaScript的属性和方法,因为JavaScript在执行方法和属性时可以把原始值当作对象
返回指定索引位置的字符
链接两个或多个字符串,返回链接后的字符串
返回字符串中检索指定字符第一次、最后一次出现的位置
提取字符串片段,并在新的字符串中返回被提取的部分
把字符串分割为子字符串数组
根据主机的语言环境把字符串转化为小写、大写
把字符串转化为小写、大写
返回字符串对象值
移除字符串首尾空白
y = 5
x = ++y // x = 6, y = 6
x = y++ // x = 5, y = 6
x = --y // x = 4, y = 4
x = y-- // x = 5, y = 4
var x = 10, y = 5;
x = y // <==> 将 y 的值赋值给 x --> x = 5
x += y // <==> x = x + y --> x = 15
x -= y // <==> x = x - y --> x = 5
x *= y // <==> x = x * y --> x = 50
x /= y // <==> x = x / y --> x = 2
x %= y // <==> x = x % y --> x = 0
var x = 5 + 5;
var y = "5" + 5;
var z = "Hello" + 5;
typeof x // number
typeof y // string
typeof z // string
Object.prototype.toString.call(x) // [object Number]
Object.prototype.toString.call(y) // [object String]
Object.prototype.toString.call(undefined) //[object Undefined]
Object.prototype.toString.call(null) // [object Null]
// ==================比较运算符=============================
var x = 5;
x === '5' // --> false 绝对等于(值和数据类型均相同)
x == '5' // --> true 等于只要值相同
x !== '5' // --> true 不绝对等于(值和类型有一个不相等,或两个都不相等)
x != '5' // --> false 不等于
// ===================逻辑运算符=============================
var x = 6, y = 3;
(x<10 && y>1) // true
(x==5 || y==3) // true
!(x == y) // true
// ====================条件运算符============================
// variablename=(condition)?value1:value2
var age = 15;
judge = (age<18)?"年龄太小":"年龄已达到"; // 年龄太小
if(condition){}
if(condition){}else{}
if (condition1){}else if(condition2){}else{}
switch()
switch(n){
case 1:
执行代码块1
break;
case 2:
执行代码块2
break;
default:
与case1和case2不同时执行的代码
}
var d = new Date().getDay(); // d = 2
switch (d)
{
case 6:
x="今天是星期六";
break;
case 0:
x="今天是星期日";
break;
default:
x="期待周末";
}
for (语句一; 语句二; 语句三){
被执行代码块
}
语句一 (代码块)开始之前执行
语句二 定义运行循环(代码块)的条件,语句二返回 true,则循环再次开始,如果返回 false,则循环将结束。
语句三 在循环(代码块)已经被执行之后执行
// ==================================================
var cars = ["BMW", "Volvo", "Saab", "ford"]
for (var i=0; i<cars.length; i++){
document.write(cars[i] + "
");
}
var tex = ''
var person = {fname:"Bill",lname:"Gates", age:56}
for (x in person){ // x 为属性名
tex = tex + person[x]
}
// --> "BillGates56"
var i = 0, x = '';
while (i<5){
x = x + "The number is " + i + "
";
i++;}
var i = 0, x = ''
do
{
x = x + "The number is " + i + "
";
i++;
}
while (i<5);
cars=["BMW","Volvo","Saab","Ford"];
var i=0;
// =======================================
for (;cars[i];)
{
document.write(cars[i] + "
");
i++;}
// =======================================
while (cars[i])
{
document.write(cars[i] + "
");
i++;}
label:
statement
cars = ["BMW", "Volvo", "Saab", "Ford"]
var x = ''
list:
{
x += (cars[0] + "
");
x += (cars[1] + "
");
x += (cars[2] + "
");
break list;
x += (cars[3] + "
");
x += (cars[4] + "
");
x += (cars[5] + "
");
}
x // --> "BMW
Volvo
Saab
"
var a
a 自动被赋值为 undefinedtypeof "John" // --> string
typeof 3.14 // --> number
typeof false // --> boolean
typeof [1,2,3,4] // --> object
typeof {name:'John', age:34} // --> object
typeof NaN // --> number
typeof new Date() // --> object
// 在JavaScript中数组是一种特殊的对象类型。因此返回object
var person = null
值为 null(空),但类型为对象var person = undefined
值为 undefined, 类型为undefinednull == undefined
--> true
var d = new Date()
d.getDate()
+
将变量变成数字
/正则表达式主体/修饰符(可选)
var x = 'cvhnjRUnoobnnladn'
var n = x.search(/runoob/i) // n = 6
// /runoob/i 是一个正则表达式
// runboob 是一个正则表达式主题(用于检索)
// i 是一个修饰符(搜索不区分大小写)
描述 | 修饰符 |
---|---|
i | 执行对大小写不敏感的匹配 |
g | 执行全局匹配(查找所有匹配而非再找到第一个匹配后停止) |
m | 执行多行匹配 |
var patt = new RegExp(pattern, modifiers);
或者 patt = /pattern/modifiers;
--> patt (模式)描述了表达式的模式
--> modifiers(修饰符)用于指定全局匹配、区分大小写和多行匹配的
// =====================================================
var patt = new RegExp('\\w+'); <==> var re = /\w+/
try
语句测试代码块的错误catch
语句处理错误throw
语句创建自定义错误 throw exception
finally
语句在 try
和 catch
语句之后,无论是否触发异常,该语句都会执行DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
head>
<body>
<p>不管输入是否正确,输入框都会再输入后清空。p>
<p>请输入 5 ~ 10 之间的数字:p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">点我button>
<p id="p01">p>
<script>
function myFunction() {
var message, x;
message = document.getElementById("p01"); <!--段落p的值-->
message.innerHTML = ""; <!--赋值段落p值为空-->
x = document.getElementById("demo").value; <!-- 获取输入值赋值给x -->
try {
if(x == "") throw "值是空的";
if(isNaN(x)) throw "值不是一个数字";
x = Number(x);
if(x > 10) throw "太大";
if(x < 5) throw "太小";
}
catch(err) {
message.innerHTML = "错误: " + err + "."; <!--输出错误信息写入到p段落-->
}
finally {
document.getElementById("demo").value = ""; <!--将输入框内容清空-->
}
}
script>
body>
html>
var x = 15 * 5
debugger
x
x = 5; // 变量x的值设置为5
x += 5;
var x; // 声明x
// ==============================
var x;
x = 5;
x += 5;
// 上面两种方式等价
var x = 5; // 初始化 x
var y = 7; // 初始化 y
x + y // ---> 12
// ================================
var x = 5; //初始化 x
x + y; // --> y undefined
var y = 7; // 初始化 y
// 因为变量声明(var y)提升了,但初始化(y=7)并不会提升,所以变量是一个未定义的变量
use strict
;表达式来声明"use strict";
x = {p1:10, p2:20} // 执行脚本时 F12 中 Console 显示 x is not defined
use strict
指令只允许出现在脚本或者函数的开头var x = 0.1, y = 0.2;
var z = x + y; // z = 0.30000000000000004
Boolean(z == 0.3) // --> false
// ===============================================
var z = (x * 10 + y * 10) / 10; // z 的结果为 0.3
Boolean(z == 0.3) // --> true
\
Undefined
不是Null
**
Null
用于对象,undefined
用于变量,属性和方法Null
,否则为undefined
Boolean(typeof obj !== "undefined" && obj !== null)
HTML 输入属性 一般在input
元素中
描述 |
---|
abled` |
abled` |
、 min` |
tern` |
uired` |
` |
CSS 伪类选择器
性 | 描述 |
---|---|
:disabled| 选取属性为 disabled属性的 input` 元素 |
|
:invalid|选取无效的 input`元素 |
|
:optional| 选取没有 optional属性的 input`元素 |
|
:requried|选择有 requeired属性的 input`元素 |
|
valid| 选取有效值的 input`元素 |
DOM 属性和方法
checkValidity()
setCustomValidity()
DOCTYPE html>
<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>
checkValidity()
:
input
元素中的数据是合法的返回true
,否则返回false
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
head>
<p>输入数字并点击验证按钮:p>
<input id="id1" type="number" min="100" max="300" required>
<button onclick="myFunction()">验证button>
<p>如果输入的数字小于 100 或大于300,会提示错误信息。p>
<p id="demo">p>
<script>
function myFunction() {
var inpObj = document.getElementById("id1");
if (inpObj.checkValidity() == false) {
document.getElementById("demo").innerHTML = inpObj.validationMessage;
<!--input元素中的validationMessage属性,浏览器错误提示信息-->
} else {
document.getElementById("demo").innerHTML = "输入正确";}}
script>
body>
html>
setCustomValidty()
:
input
元素的 validationMessage
属性,用于自定义错误提示信息的方法。使用setCustomValidty()
设置自定义提示后,validity.customError
就会变成 true
,则 checkValidity
总会返回 false
。如果要重新判断需要取消自定义提示,方式如下:setCustomValidity('')
,setCustomValidity(null)
,setCustomValidity(undefined)
。var inpObj = document.getElementById("id1");
inpObj.setCustomValidity(''); // 取消自定义提示的方式
if (inpObj.checkValidity() == false) {
if(inpObj.value==""){
inpObj.setCustomValidity("不能为空!");
}else if(inpObj.value<100 || inpObj.value>300){
inpObj.setCustomValidity("请重新输入数值(100~300之间)!");
}
document.getElementById("demo").innerHTML = inpObj.validationMessage;
} else {
document.getElementById("demo").innerHTML = "输入正确";
}
this
关键字
this
表示当前对象的一个引用。但在 JavaScript 中this
不是固定不变的,他会随着执行环境的改变而改变。
this
表示当前对象的一个引用(指向调用它所在方法的对象)this
表示全局对象(指向全局对象)var x = this
--> [object Window]
this
表示全局对象(是函数,不是方法)
this
上。(函数的所属者为window
)在浏览器中,window
就是该全局对象[object Window]
this
指向该方法(函数)所属的对象 [object Object]
this
是未定义的(undefined)
call()
和apply()
方法可以将this
引用到任何对象
apply
和call
就是函数对象的方法,他们允许切换函数执行的上下文环境(context),即this
绑定的对象// 在函数中,函数的所属者默认绑定到 this 上。在浏览器中,window 就是该全局对象
function myFunction() {
return this; // --> [object Window]
}
// ==================================================================
// 严格模式下函数是没有绑定到this上,这时候this是undefined
"use strict";
function myFunction() {
return this; // --> undefined
}
// ==================================================================
// person 对象是函数所有者,person 对象默认绑定到 this 上
var person = {
firstName : "John",
lastName : "Doe",
id : 5566,
myFunction : function() {
return this; // --> [object Object]
}};
// ==================================================================
// 使用 person2 作为参数来调用 person1.fullName 方法时, this 将指向 person2, 即便它是 person1 的方法:
var person1 = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
var person2 = {
firstName:"John",
lastName: "Doe",
}
person1.fullName.call(person2); // --> "John Doe"
let
和 const
var
声明的变量只能在函数内容访问,如果不使用 var
则是全局变量(函数与块级作用域不同)var
关键字声明的变量不具备块级作用域的特性,他在{}
仍能被访问到
ES6
之前是没有块级作用域概念var
关键字重新声明变量可能会带来问题,在块中重新声明变量也会重新声明块外的变量:使用 let
解决ES6
可以使用 let
关键字来实现块级作用域
let
声明的变量只在 let
命令所在的代码块 {}
内有效,在 {}
之外不能访问var x = 10 // --> x = 10
{
var x = 2; // --> x = 2
}
// ==================================================
var x = 10 // --> x = 10
{
let x = 2; // --> x = 2
}
window
对象,使用 var
关键字声明的全局作用域变量属于 window
对象,使用 let
关键字声明的全局作用域变量不属于 window
对象var x = "cy"; // --> 可以使用 window.x 访问变量
let y = 'cy'; // --> 不能使用 window.y 访问变量
var
关键字声明的变量在任何地方都可以修改;在相同的作用域或块级作用域中,不能使用 let
关键字来重置 var
关键字声明的变量;在相同的作用域或者块级作用域中,不能使用 let
关键字来重置 let
关键字声明的变量 ;在不同作用域或者块级作用域中 let
关键字是可以重新声明赋值的// 在相同的作用域或者块级作用域中,不能使用 let 关键字来重置 var 关键字声明的变量
var x = 2; // 合法
let x = 3; // 不合法
或
{
var x = 4; // 合法
let x = 5 // 不合法
}
// ==================================================================
// 在不同作用域或者块级作用域中 let 关键字是可以重新声明赋值的
let x = 2; // 合法
{
let x = 4; // 合法
}
var
关键字来重置 let
关键字声明的变量let x = 2; // 合法
var x = 3; // 不合法
或
{
let x = 4; // 合法
var x = 5; // 不合法
}
变量提升:var
关键字定义的变量可以先使用在声明,但 let
关键字定义的变量则必须先声明再使用。
const
定义常量与使用 let
定义的变量相似:二者均是块级作用域;均不能和它所在作用域内的其他变量或函数拥有相同的名称
const
声明的常量必须初始化,而 let
声明的变量不用;const
定义常量的值不能通过再赋值修改,也不能再次声明(是在同一作用域下)。而 let
定义的变量值可以修改
// 必须初始化
const PI; PI = 3.1415926; // --> 错误
const PI = 3.1415926; // --> 正确
// ===============================================
// 不能修改 --> 是在同一作用域下
const PI = 3.1415926;
PI = 3.14; // --> 报错
// ============================================
let x = 1;
x = 2 // --> x = 2
const
的本质:const
定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const
定义的对象或者数组,其实是可变的。// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改属性:
car.color = "red";
// 添加属性
car.owner = "Johnson";
// 不能赋值
car = {type:"Volvo", model:"EX60", color:"red"}; // --> 错误
const
关键字在不同作用域,或不同块级作用域中是可以重新声明的const x = 2; // 合法
{
const x = 3; // 合法
}
{
const x = 4; // 合法
}
json
英文全称 Javascript Object Notation(符号)
var obj = JSON.parse(text);
json
字符串。
JSON.stringify()
json
是 js
对象的字符串表示法,json
本质是一个字符串。void
是 javascript 中重要关键字,该操作符指定要计算一个表达式但是不返回值。void(0)
计算为 0,但 JavaScript上没有任何效果void func() // --> void(func())
javascript:void func() // --> javascript:void(func())
// void 指定要计算一个表达式,但不返回值
function getValue(){
var a, b, c;
a = void(b = 5, c = 7);
document.write(a, b, c) // --> a = undefined, b = 5, c = 7
}
// 当用户链接时,`void(0)` 计算为 0,但 JavaScript上没有任何效果
<a href="javascript:void(0)">单机此处什么也不会发生a>
< a href="javascript:void(alert('Warning!!'))">点我弹出警示框a>
href="#"
与 href="javascript:void(0)"
的区别
#
包含一个位置信息,默认的锚时 #top
也就是网页的上端;javascript:void(0)
仅仅表示死链接。#
来定位页面的具体位置,格式为:#
+ id
<a href="javascript:void(0);">点我没有反应的!a>
<a href="#position">点我定位到指定位置!a>
……
<p id="position">定位点p>
……
setTimeout(function () {
document.getElementById("demo").innerHTML="RUNOOB!";
}, 3000);
document.getElementById("demo2").innerHTML="RUNOOB-2!";
// setTimeout 就是一个耗时3秒的过程,它的第一个参数是回调函数,第二个参数是毫秒数,这个函数执行时候会产生一个子线程,子线程会等待3秒,然后执行回调函数,在命令行输出
// setTimeout 会在子线程中等待 3 秒,在 setTimeout 函数执行之后主线程并没有停止
AJAX
setTimeout
函数之外,异步回调广泛应用于 AJAX
编程DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)title>
head>
<body>
<p><strong>以下内容是通过异步请求获取的:strong>p>
<p id="demo">p>
<script>
var xhr = new XMLHttpRequest();
xhr.onload = function () {
// 输出接收到的文字数据
document.getElementById("demo").innerHTML=xhr.responseText;
}
xhr.onerror = function () {
document.getElementById("demo").innerHTML="请求出错";
}
// 发送异步 GET 请求
xhr.open("GET", "https://www.runoob.com/try/ajax/ajax_info.txt", true);
xhr.send();
script>
body>
html>
Promise
是一个ECMAScript 6 提供的 类,目的是更加优雅地书写复杂的异步任务。Promise
,新建一个 Promise
对象 new Promise(function(resolve, reject){……})
Promise
构造函数只有一个参数,是一个函数,这个函数在构造之后会被异步运行,所以称之为起始函数。起始函数包括两个参数 resolve
,reject
,当 Promise
被构造时,起始函数会被异步执行。
resolve
和 reject
均是函数,调用 resolve
代表一切正常, reject
是出现异常的时候调用的Promise
类有 .then()
,.catch()
,.finally()
,三个方法,这三个方法的参数均是一个函数,.then()
可以将参数中的函数添加到当前 Promise
的正常序列,.catch()
则是设定 Promise
的异常处理序列,.finally()
是在执行 Promise
执行的最后一定会执行的序列。.then()
传入的函数会按顺序依次执行,有任何异常均会直接跳到 catch
序列new Promise(function(resolve, reject){
var a = 0, b = 1;
if (b==0) reject("Divide zero");
else resolve(a/b);
}).then(function(value){
console.log('a / b = ' + value)
}).catch(function(err){
console.log(err);
}).finally(function(){
console.log('end!')
})
resolve()
中可以放置一个参数用于向下一个 then
传递一个值, then
中函数也可以返回一个值(return
)传递给 then
。但是,如果 then
中返回的是一个 Promise
对象,那么下一个 then
将相当于对这个返回的 Promise
进行操作。
resolve
和 reject
的作用域只有起始函数,不包括之后的 catch 函数用于处理异常reject()
参数中一般会传递一个异常给之后的 catch 函数用于处理异常resolve
和 reject
并不能够使起始函数停止运行,别忘了 return
。then
模块默认会向下顺序执行,return
是不能中断的,可以通过 throw
来跳转至 catch
实现中断new Promise(function (resolve, reject) {
console.log(1111);
resolve(2222); // --> 传递给下一个 then
}).then(function (value) {
console.log(value);
return 3333; // --> then 中的函数也可以返回一个值传递给 then
}).then(function (value) {
console.log(value);
throw "An error"; // --> 传递一个自定义的异常给catch函数,用于处理异常
}).catch(function (err) {
console.log(err);
}); // --> 1111, 2222, 3333, An error
Promise
对象的函数称作 Promise
函数,常用于开发居于异步操作的库function countnumber(delay, message){
return new Promise(function(resolve, reject){
setTimeout(function(){
console.log(message);
resolve();
}, delay) // setTimeout(回调函数,毫秒数)
})
}
countnumber(1000, "First").then(function(){
return countnumber(2000, "Second");
}).then(function(){
countnumber(3000, "Third")
})
// ======================================== 或者
new Promise(function (resolve, reject) {
setTimeout(function () {
console.log("First");
resolve();
}, 1000);
}).then(function () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log("Second");
resolve();
}, 2000);
});
}).then(function () {
setTimeout(function () {
console.log("Third");
}, 3000);
});
使用关键字function
定义函数,函数声明之后不会立即执行,会在我们需要的时候调用
通过表达式定义,函数表达式可以存储在变量中,变量也可以作为一个函数使用
var x = function(a, b){return a * b};
var y = x(4, 3);
// 以上函数实际上是一个匿名函数(函数没有名称),函数存储在变量中,不需要函数名称,通常通过变量名来调用。上述函数以分号结尾,因为它是一个执行语句。
Function()
构造函数,通过内置的 **JavaScript 函数构造器(Function()
)**定义。var myFunction = new Function("a", "b", "return a*b");
var x = myFunction(4, 3);
函数提升(Hoisting:是JavaScript 默认将当前作用域提升到前面去的行为)
函数表达式可以自调用,如果表达式后面紧跟 ()
,则会自动调用,通过添加 ()
,来说明它是一个函数表达式
(function(){
var x = "Hello!";
})(); // 实际上是一个匿名自我调用的函数(没有函数名)
函数是对象
typeof
操作符判断函数类型 将返回 function
,但在JavaScript 函数描述为一个对象更加准确。箭头函数
(参数1, 参数2, ……) => {函数声明}
(参数1, 参数2, ……) => 表达式
const x = (x, y) => {return x * y}
this
。不适合定义一个对象方法。当我们使用箭头函数时候,箭头函数会默认帮我们绑定外层 this
的值,所以在箭头函数中的 this
的值和外层的 this
是一样的。箭头函数是不能提升的,所以需要在使用之前定义。const
比使用 var
更安全,因为函数表达式始终是一个常量。return
关键字和大括号 {}
ES5
中如果函数在调用时未提供隐式参数,参数会默认设置为: undefined
arguments
对象来调用。
arguments
对象。argument
对象包含了函数调用的参数数组。x = findMax(1, 123, 500, 115, 44, 88);
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;
}
this
的初始化(一般而言,this
指向函数执行时当前对象)
myFunction()
和 window.myFunction()
是一样的call()
和 apply()
是预定义的函数方法。两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。// 构造函数
function myFunction(arg1, arg2){
this.firstname = arg1;
this.lastname = arg2;
}
var x = new myFunction("John", "Doe");
x.firstname // --> "John"
// 在一个已存在构造器的对象中是不能添加新的属性:
myFunction.nationality = "English" // --> 无法添加,但不会报错
var myObject, myArray;
function myFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray); // 返回 20
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
通过 HTML DOM ,可以访问 JavaScript HTML 文档的所有元素
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)
HTML DOM 模型会被构造为对象的树
var x = document.getElementById("")
,若找到该元素,则该方法则将以对象(在 x 中)的形式返回该元素。如果未找到该元素,则 x 将包含 null
var x = document.getElementByTagName("")
var x = document.getElementByClassName("")
document.write()
可用于直接向 HTML 输出流 写内容 document.write(Data())
document.getElementById("").innerHTML=""
document.getElementById(id).attribute=""
document.getElementById(id).style.property=新样式
document.getElementById("p2").style.color="blue";
document.getElementById("p2").style.fontFamily="Arial";
document.getElementById("p2").style.fontSize="larger";
将鼠标移至文本上
onmousedown
, onmouseup
以及 onclick
构成了鼠标点击事件的所有部分。首先当点击鼠标按钮时,会触发 onmousedown
事件,当释放鼠标按钮时,会触发 onmouseup
事件,最后,当完成鼠标点击时,会触发 onclick
事件。onload
和 onunload
事件会在用户进入或离开页面时被触发。DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)title>
head>
<body onload="checkCookies()">
<script>
function checkCookies(){
if (navigator.cookieEnabled==true){
alert("Cookies 可用")
}
else{
alert("Cookies 不可用")
}
}
script>
<p>弹窗-提示浏览器 cookie 是否可用。p>
body>
html>
document.getElementById("myBtn").addEventListener("click", displayDate);
element.addEventListener(event, function, useCapture);
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Titletitle>
<style>
div {
background-color: coral;
border: 1px solid;
padding: 50px;
}
style>
head>
<body>
<p>实例演示了在添加不同事件监听时,冒泡与捕获的不同。p>
<div id="myDiv">
<p id="myP">点击段落,我是冒泡。p>
div><br>
<div id="myDiv2">
<p id="myP2">点击段落,我是捕获。 p>
div>
<script>
document.getElementById("myP").addEventListener("click", function() {
alert("你点击了 P 元素!");
}, false);
document.getElementById("myDiv").addEventListener("click", function() {
alert(" 你点击了 DIV 元素 !");
}, false);
document.getElementById("myP2").addEventListener("click", function() {
alert("你点击了 P2 元素!");
}, true);
document.getElementById("myDiv2").addEventListener("click", function() {
alert("你点击了 DIV2 元素 !");
}, true);
script>
body>
html>
removeEventListener()
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)title>
head>
<body>
<div id="div1">
<p id="p1">这是一个段落。p>
<p id="p2">这是另外一个段落。p>
div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
var element = document.getElementById("div1");
element.appendChild(para);
script>
body>
html>
parent.removeChild(child)
replaceChild()
方法来替换 HTML DOM 中的元素。var x = document.getElementsByTagName("p");
getElementsByTagName()
方法返回 HTMLCollection 对象。<script>
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
Person.prototype.nationality = "English"; // --> Person.nationality = "English" --> 无法添加上去
var myFather = new Person("John", "Doe", 50, "blue");
document.getElementById("demo").innerHTML =
"我父亲的国籍是 " + myFather.nationality;
script>
var y = 9999999999999999
--> y = 1000……
var x = 0.2+0.1; // 输出结果为 0.30000000000000004
toString()
方法 输出16进制、8进制、2进制。num.toString(16)
, num.toString(8)
注:(var num = 128)
0/0
得 NaN整数/0
得 infinityindexOf()
来定位字符串中某一个指定的字符首次出现的位置:match()
函数用来查找字符串中特定的字符,并且如果找到的话,则返回这个字符。replace()
方法在字符串中用某些字符替换另一些字符。toUpperCase()
,toLowerCase()
split()
函数转为数组:var str="Hello world, welcome to the universe.";
var n=str.indexOf("welcome");
// =======================================
str="Please visit Microsoft!"
var n=str.replace("Microsoft","Runoob");
// ======================================
txt="a,b,c,d,e" // String
txt.split(","); // 使用逗号分隔
var myDate = new Date()
var myCars = new Array()
var x = myCars.length
返回数组中元素个数var y = myCars.indexOf("BMW")
返回 BMW 值得索引值concat()
连接数组join()
把数组的元素放入一个字符串pop()
输出数组最后一个元素并返回删除的元素push()
向数组末尾添加一个或更多的元素,返回新的长度var b = new Boolean(0)
返回 true
round(x)
四舍五入。floor(x)
对 x 进行下舍入random()
返回0-1之间的随机数var patt=new RegExp(pattern,modifiers);
// ================================
var patt=/pattern/modifiers;
test()
方法搜索字符串指定的值,根据结果并返回真或假,含有为 truevar patt1=new RegExp("\\d");
document.write(patt1.exec("The best things in 9 life are free"));
window.document.getElementById("header"); <==> document.getElementById("header");
window.screen
对象包含有关用户屏幕的信息。(注:window.screen
对象在编写时可以不使用 window 这个前缀。)
screen.availWidth
- 可用的屏幕宽度screen.availHeight
- 可用的屏幕高度window.location
对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。window.screen
对象在编写时可以不使用 window 这个前缀。)history.back()
- 与在浏览器点击后退按钮相同history.forward()
- 与在浏览器中点击向前按钮相同<script>
txt = "浏览器代号: "
+ navigator.appCodeName + "";
txt+= "浏览器名称: "
+ navigator.appName + "";
txt+= "浏览器版本: "
+ navigator.appVersion + "";
txt+= "启用Cookies: "
+ navigator.cookieEnabled + "";
txt+= "硬件平台: "
+ navigator.platform + "";
txt+= "用户代理: "
+ navigator.userAgent + "";
txt+= "用户代理语言: "
+ navigator.language + "";
document.getElementById("example").innerHTML=txt;
script>
window.alert("sometext");
window.confirm("sometext");
window.prompt("sometext","defaultvalue");
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。var person=prompt("请输入你的名字","Harry Potter");
(\n)
来设置换行。setInterval()
间隔指定的毫秒数不停地执行指定的代码。
var myVar = setInterval(function(){alert("Hello")},3000);
clearInterval()
方法用于停止 setInterval()
方法执行的函数代码。
clearInterval(myVar);
setTimeout()
在指定的毫秒数后执行指定代码。
var myVar = setTimeout(function(){alert("Hello")},3000);
等待三秒,然后弹出 HelloclearTimeout()
方法用于停止执行 setTimeout()
方法的函数代码。
clearTimeout(myVar);
username=John Doe
document.cookie="username=John Doe";
document.cookie
将以字符串的方式返回所有的 cookie,类型格式: cookie1=value; cookie2=value; cookie3=value;
标签中引用该库即可:
$()
函数(jQuery 函数)。若向该函数传递DOM对象,会返回 jQuery 对象,带有向其添加的jQuery功能function myFunction()
{
var obj=document.getElementById("h01");
obj.innerHTML="Hello jQuery";
}
onload = myFunction;
// <============================================>
function myFunction()
{
$("#h01").html("Hello jQuery");
}
$(document).ready(myFunction);
// HTML DOM 文档对象被传递到 jQuery :$(document)
// 向 jQuery 传递 DOM 对象时,jQuery 会返回以 HTML DOM 对象包装的 jQuery 对象。
// jQuery 函数会返回新的 jQuery 对象,其中的 ready() 是一个方法。
// 由于在 JavaScript 中函数就是变量,因此可以把 myFunction 作为变量传递给 jQuery 的 ready 方法。
注:jQuery 返回 jQuery 对象,与已传递的 DOM 对象不同;jQuery 对象拥有的属性和方法,与 DOM 对象不同;不能再 jQuery 对象上使用 HTML DOM 的属性和方法
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)title>
<script src="https://cdn.staticfile.org/jquery/1.8.3/jquery.min.js">script>
<script>
function myFunction(){
$("#h01").attr("style","color:red").html("Hello jQuery")
}
$(document).ready(myFunction);
script>
head>
<body>
<h1 id="h01">h1>
body>
html>
$()
函数$()
函数接受 HTML DOM 元素的 id 值(或 DOM 元素),并会向 DOM 对象添加新的功能。window.onload()
的 ready()
方法。相反,Prototype 会向浏览器及 HTML DOM 添加扩展。Event.observe()
接受三个参数:
DOCTYPE html>
<html>
<script src="https://cdn.staticfile.org/prototype/1.7.3/prototype.min.js">
script>
<script>
function myFunction()
{
$("h01").writeAttribute("style","color:red").insert("Hello Prototype!");
}
Event.observe(window,"load",myFunction);
script>
head>
<body>
<h1 id="h01">h1>
body>
html>
装的 jQuery 对象。
// jQuery 函数会返回新的 jQuery 对象,其中的 ready() 是一个方法。
// 由于在 JavaScript 中函数就是变量,因此可以把 myFunction 作为变量传递给 jQuery 的 ready 方法。
**注:jQuery 返回 jQuery 对象,与已传递的 DOM 对象不同;jQuery 对象拥有的属性和方法,与 DOM 对象不同;不能再 jQuery 对象上使用 HTML DOM 的属性和方法**
```html
菜鸟教程(runoob.com)
$()
函数$()
函数接受 HTML DOM 元素的 id 值(或 DOM 元素),并会向 DOM 对象添加新的功能。window.onload()
的 ready()
方法。相反,Prototype 会向浏览器及 HTML DOM 添加扩展。Event.observe()
接受三个参数:
DOCTYPE html>
<html>
<script src="https://cdn.staticfile.org/prototype/1.7.3/prototype.min.js">
script>
<script>
function myFunction()
{
$("h01").writeAttribute("style","color:red").insert("Hello Prototype!");
}
Event.observe(window,"load",myFunction);
script>
head>
<body>
<h1 id="h01">h1>
body>
html>