引入
1. 在 .html 中, 写在 head 或者 body 中
<script type="text/javascript">
alert("我的第一个 JavaScript");
</script>
如果有多个 <script>, 会从上到下按顺序执行
2. 外部 js 文件
创建 index.js 文件
在 index.js 文件中添加代码
alert("我的第一个 JavaScript");
在 .html 中, 写在 head 或者 body 中
<script src="./js/index.js" type="text/javascript" charset="utf-8"></script>
注意: 如果 <script> 中有了 src 属性, 标签里面的代码会失效
日志打印, 输出在控制台(F12/Console)(原句输出)
console.log("H<sub>2</sub>O");
向页面中写入内容, 可以识别标签
document.write("H<sub>2</sub>O");
弹出框: 警告框
window.alert("这是一个警告框");
弹出框: 确认框
if(window.confirm("这是一个确认框"))
{
alert("你点击了确认按钮")
}
else
{
alert("你点击了取消按钮");
}
弹出框: 输入
var person = prompt("请输入您的姓名", "默认名字");
if (person != null) alert("早上好, " + person);
else alert("你没有输入内容");
数据类型
数据类型 Number String Boolean Undefined Null
Undefined 不存在的变量, 已经定义但是没有赋值的变量也是 Undefined
Null 是空值
var a = null;
var a = 1;
console.log(typeof(a));
var str = "123";
var num = parseInt(str);
console.log(typeof(num));
var num = 123;
var str = num.toString();
1 == "1" true 值相等
1 === "1" false 值相等 && 类型相等
&& || !
var arr = [1,2,3,4,5];
arr[0]
arr.length
var arr = new Array[1,2,3,"str"];
arr.forEach(function(item){ console.log(item); })
arr.push(6);
arr.unshift(7);
arr.pop();
arr.shift();
arr.join("&");
arr.reverse();
arr.slice(2,5);
arr.splise(index,count,item1,item2,...);
arr.concat([1,2,3,4]);
arr.indexOf(4);
arr.lastIndexOf(4);
arr.sort();
arr.sort(function(x,y){
return x.length > y.length;
})
str.substring(3);
String
字符串转数字
var str = "123";
var num = parseInt(str);
console.log(typeof(num));
字符串替换
stringObject.replace(regexp/substr,replacement)
regexp 字符串中要替换掉的正则表达式
substr 字符串中要替换掉的子字符串
replacement 一个字符串值, 要替换的文本或生成替换文本的函数
retern 返回新字符串
修饰符
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹
方括号用于查找某个范围内的字符:
表达式
[abc] 查找方括号之间的任何字符
[0-9] 查找任何从 0 至 9 的数字
(x|y) 查找任何以 | 分隔的选项
元字符
\d 查找数字
\s 查找空白字符
\b 匹配单词边界
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符
量词
n+ 匹配任何包含至少一个 n 的字符串
n* 匹配任何包含零个或多个 n 的字符串
n? 匹配任何包含零个或一个 n 的字符串
替换示范
1. 只把第一个 lmy 替换成 black
var str = "This is lmy, lmy is good, lmy is nice";
var ret = str.replace(/lmy/,"black");
2. 把字符串中所有的 lmy 替换成 black
var str = "This is lmy, lmy is good, lmy is nice";
var ret = str.replace(/lmy/g,"black");
var str = " 1Z0001 & _ 9 ";
console.log(str);
str = str.replace(/&/g," ");
str = str.replace(/_/g," ");
str = str.replace(/\s+/g," ");
str = str.replace(/(^\s*)|(\s*$)/g, "");
str = str.replace(/(^\s*)/g, "");
str = str.replace(/(\s*$)/g, "");
数组
var arr = ["Unity", "C#"]
arr.push("Lua")
arr.unshift("Java")
for(i = 0; i < arr.length; i++) {
console.log(arr[i])
}
函数
function Func(a,b) { return a+b; }
function myFunc(fun,a,b) { return fun(a,b); }
function mySum(a,b) { return a+b; }
var num = myFunc(mySum, 10, 18);
var onNum = mySum;
var onSub = function(a,b) { return a-b; }
function onCal(function(){}, 1,2);
(function(a,b){})(1,2)
系统函数
alert("我的第一个 JavaScript");
定时器
<button onclick="start()" >开始计时</button>
<button onclick="stop()" >停止计时</button>
<button onclick="delay()" >三秒等待</button>
var timer;
function func() { console.log("间隔 1 秒"); }
function start() { timer = setInterval("func()",1000); }
function stop() { clearInterval(timer); }
function delay() { setTimeout("alert('对不起, 要你久候')", 3000); }
Document
document.write("H<sub>2</sub>O");
js获取页面元素
获取页面元素时, 要确保页面元素已经在页面中生成
所以代码要书写在 HTML 代码之后
var x = document.getElementById("intro");
var x = document.getElementById("main");
var y = x.getElementsByTagName("p");
var x = document.getElementsByClassName("intro");
document.getElementById("p1").innerHTML = "新文本!";
document.getElementById("image").src = "landscape.jpg";
document.getElementById("p2").style.color = "blue";
document.getElementById("p2").style.fontFamily = "Arial";
document.getElementById("p2").style.fontSize = "larger";
创建新的 HTML 元素 (节点) - appendChild()
要创建新的 HTML 元素 (节点)需要先创建一个元素,然后在已存在的元素中添加它
Event
设置点击事件(方式1)
<div onclick="alert('弹出框: 你点击了div');">
点击响应事件
</div>
设置点击事件(方式2)
<div onclick = "myClick()">
点击响应事件
</div>
function myClick() {
alert("弹出框: 你点击了DIV");
}
设置点击事件(方式3)
<div>点击响应事件</div>
var div = document.getElementsByTagName("div")[0];
div.onclick = function(){
alert("你点击了div");
};
设置点击事件(方式4)
document.getElementById("myBtn").addEventListener("click", function(){
document.getElementById("demo").innerHTML = "Hello World";
});
界面点击事件
document.onclick = function(){
alert("你点击了界面");
};
onload 和 onunload 事件会在用户进入或离开页面时被触发
<body onload="checkCookies()">
onchange 输入框内容修改后, 响应事件
onfocus 当输入字段获得焦点时
onmouseover 鼠标移动到元素上面
onmouseout 鼠标移出元素
onmousedown 点击鼠标按钮时
onmouseup 释放鼠标按钮时
onclick 完成鼠标点击时
element.addEventListener(event, function, useCapture);
element.removeEventListener(event, function, useCapture);
event: 事件类型, click mousedown mouseup mouseover mouseout
function: 响应的函数
useCapture: (bool)事件是冒泡还是捕获, 此参数可省略
例如:
element.addEventListener("click", function(){ alert("Hello World!"); });
element.removeEventListener("mousemove", myFunction);
注: 同一个元素中可以添加多个同类型的事件句柄, 事件不会覆盖
element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);
向 Window 对象添加事件句柄
当用户重置窗口大小时添加事件监听:
window.addEventListener("resize", function(){
document.getElementById("demo").innerHTML = sometext;
});
当传递参数值时, 使用"匿名函数"调用带参数的函数
element.addEventListener("click", function(){ myFunction(p1, p2); });
事件传递有两种方式: 冒泡与捕获(事件触发顺序)
<p> 元素插入到 <div> 元素中:
<div><p></p></div>
用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?
在 冒泡 中, 内部元素的事件会先被触发, 然后再触发外部元素事件, 即: <p> 元素的点击事件先触发, 然后会触发 <div> 元素的点击事件
在 捕获 中, 外部元素的事件会先被触发, 然后再触发内部元素事件, 即: <div> 元素的点击事件先触发, 然后再触发 <p> 元素的点击事件
addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型
addEventListener(event, function, useCapture);
默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递
document.getElementById("myDiv").addEventListener("click", myFunction, true);
表格
var table = document.getElementsByTagName("table")[0];
var trList = table.getElementsByTagName("tr");
var trFirst = trList[0];
var tdList = trFirst.getElementsByTagName("th");
var tdFirst = tdList[0];
console.log(tdFirst.innerHTML);
var row = table.rows.length;
var col = table.rows[0].cells.length;
console.log("行数: "+ row);
console.log("列数: "+ col);
console.log(table.rows[0].cells[2].innerHTML);
Json
var t = {
id: 10,
name: "Black",
hp: 100
};
console.log(t);
console.log(JSON.stringify(t));
键值对
var dataMap = {
key1:"val1",
key2:"val2",
key3:"val3"
};
console.log(dataMap["key2"]);
console.log(dataMap.key3);
dataMap["key3"] = "value3";
dataMap.key4 = "value4";
if(!!dataMap["key1"]) delete(dataMap["key1"]);
for(var key in dataMap)
console.log( key + " : " + dataMap[key]);
var dataList = [{},{}];
dataList[0].name = "Black"
dataList[0].sex = "boy";
dataList[0].age = 24;
dataList[1].name = "Anna"
dataList[1].sex = "girl";
dataList[1].age = 19;
console.log(dataList[0].sex);
console.log(dataList[1].name);
一维数组
var list = ["a","b","c","d","e"];
var count = list.length;
for(var i = 0; i < count; i++)
console.log(i + "=>" + list[i]);
for(var i = 0; i < list.length; i++)
console.log(i + "=>" + list[i]);
for(var i in list)
console.log(i + "=>" + list[i]);
var index = 0;
for(var elem of list)
console.log(index++ + "=>" + elem);
二维数组
var arr =
[
[ "apple", "banana", "pear" ],
[ "monday", "tuesday", "wednesday", "thursday"],
[ "one", "two", "three", "four"]
];
console.log(arr[0][2]);
arr[0][2]="梨";
console.log(arr[0][2]);
for(var i = 0; i < arr.length; i++)
for(var j = 0; j < arr[i].length; j++)
console.log(arr[i][j]);
var arr = new Array();
arr[0] = new Array();
arr[1] = new Array();
arr[0][0] = "00";
arr[0][1] = "01";
arr[0][2] = "02";
arr[0][3] = "03";
arr[1][0] = "10";
arr[1][1] = "11";
arr[1][2] = "12";
sessionStorage
sessionStorage.setItem("key","val");
console.log(sessionStorage.getItem("key"));
sessionStorage.removeItem("key");
console.log(sessionStorage.getItem("key"));
sessionStorage.setItem("key","xxx");
console.log(sessionStorage.getItem("key"));
sessionStorage.clear();
console.log(sessionStorage.getItem("key"));
localStorage.setItem("key","val");
console.log(localStorage.getItem("key"));
localStorage.removeItem("key");
console.log(localStorage.getItem("key"));
localStorage.setItem("key","xxx");
console.log(localStorage.getItem("key"));
localStorage.clear();
console.log(localStorage.getItem("key"));
获取网址信息
console.log("window.location.host = " + window.location.host)
console.log("window.location.hostname = " + window.location.hostname)
console.log("window.location.port = " + window.location.port)
console.log("window.location.href = " + window.location.href)
console.log("window.location.protocol = " + window.location.protocol)
console.log("window.location.pathname = " + window.location.pathname)
console.log("window.location.search = " + window.location.search)
console.log("window.location.hash = " + window.location.hash)
window.location.host = 192.168.2.234:8080
window.location.hostname = 192.168.2.234
window.location.port = 8080
window.location.href = http://192.168.2.234:8080/tsg/h5/
window.location.protocol = http:
window.location.pathname = /tsg/h5/
window.location.search =
window.location.hash =
Ajax
$.ajax({
type: "GET",
dataType: 'json',
url: "http://localhost:8080/login",
data: {
"username": appVue.username,
"password": appVue.password
},
success: function (result) {
console.log(result);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("请求对象 XMLHttpRequest.status: " + XMLHttpRequest.status);
console.log("请求对象 XMLHttpRequest.readyState: " + XMLHttpRequest.readyState);
console.log("错误类型 textStatus: " + textStatus);
console.log("异常对象 errorThrown: " + errorThrown);
}
});