本节:基础的JS功能的编写。
JACAscript
1.写一个函数,调用这个函数,函数带了2个参数。
(1)调用:account(10,20)
函数:
function account(price, number){
var sum = price * number;
return sum;
}
(2)
调用:hello(“张三”,10)
函数:
function hello(name,age){
document.write('你好'+name+age)}
2.使用jQuery写向后端发送数据,参数名参数值随意。
//button是id或者class
$("button").click(function(){
$.post("发送的文件",
{
//传的参数
name:"数值",
url:"数值值"
},
function(data,status){ //成功之后传的函数名
alert("数据: \n" + data + "\n状态: " + status);
});
});
3.请输入数字。如果输入值不是数字,浏览器会弹出提示框
<p>请输入数字。如果输入值不是数字,浏览器会弹出提示框。</p>
<input id="demo" type="text">
<script>
function myFunction()
{
var x=document.getElementById("demo").value;
if(isNaN(x)||x.replace(/(^\s*)|(\s*$)/g,"")==""){
alert("不是数字");
}
}
</script>
<button type="button" οnclick="myFunction()">点击这里</button>
4.循环输出内容:John 现在 50 岁。
<p id="demo"></p>
<script>
var person = {
firstName : "John",
lastName : "Doe",
age : 50,
eyeColor : "blue"
};
document.getElementById("demo").innerHTML =
person.firstName + " 现在 " + person.age + " 岁。";
</script>
- 点击出现弹窗
<button οnclick="myFunction()">点我</button>
<script>
function myFunction()
{
alert("Hello World!");
}
</script>
局部变量在函数里面定义的变量,函数执行完后局部变量会自动销毁。函数外面使用无效
<p id="demo"></p>
<script>
var carName = "Volvo"; // 全局变量
myFunction();
function myFunction()
{
document.getElementById("demo").innerHTML =
"我可以显示 " + carName;
var carName = "Volvo"; //在函数里面是局部变量
}
6.<button οnclick="getElementById('demo').innerHTML=Date()">现在的时间是?</button>
<p id="demo"></p>
7.输出的是false
<p id="demo"></p>
<script>
var x = "John"; // x 是字符串
var y = new String("John"); // y 是一个对象
document.getElementById("demo").innerHTML = x===y;
</script>
<p>=== 为绝对相等,即数据类型与值都必须相等。</p>
- 判断,三元运算符
<p>点击按钮检测年龄。</p>
年龄:<input id="age" value="98" />
<p>是否达到投票年龄?</p>
<button οnclick="myFunction()">点击按钮</button>
<p id="demo"></p>
<script>
function myFunction()
{
var age,voteable;
age=document.getElementById("age").value;
voteable=(age<18)?"年龄太小":"年龄已达到";
document.getElementById("demo").innerHTML=voteable;
}
</script>
9.点击下面的按钮,只要 i 小于 5 就一直循环代码块。
<button οnclick="myFunction()">点击这里</button>
<p id="demo"></p>
<script>
function myFunction(){
var x="",i=0;
while (i<5){
x=x + "该数字为 " + i + "<br>";
i++;
}
document.getElementById("demo").innerHTML=x;
}
或者
function myFunction(){
var x="",i=0;
do{
x=x + "该数字为 " + i + "<br>";
i++;
}
while (i<5)
document.getElementById("demo").innerHTML=x;
}
</script>
10.循环输出数组
<script>
cars=["BMW","Volvo","Saab","Ford"];
var i=0;
for (;cars[i];){
document.write(cars[i] + "<br>");
i++;
}
</script>
- typeof 操作符返回变量或表达式的类型。
- <p id="demo"></p>
<script>
document.getElementById("demo").innerHTML =
typeof "john" + "<br>" + //string
typeof 3.14 + "<br>" + //number
typeof false + "<br>" + //boolean
typeof [1,2,3,4] + "<br>" + //object
typeof {name:'john', age:34}; //object
</script>
13.你可以设置为 null 来清空对象:
var person = null; // 值为 null(空), 但类型为对象
,undefined 是一个没有设置值的变量。比如var person;就是有变量,但是没有值
null 和 undefined 的值相等,但类型不等:
14.在 JavaScript 中有 6 种不同的数据类型:String,number,boolean,object,function,symbol
3 种对象类型:Object,Date,Array
2 个不包含任何值的数据类型:Null,undefined
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
NaN 的数据类型是 number,数组(Array)的数据类型是 object
日期(Date)的数据类型为 object,null 的数据类型是 object
未定义变量的数据类型为 undefined,如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 object。
15.<p> String() 方法可以将数字转换为字符串。</p>
<p id="demo"></p>
<script>
var x = 123;
document.getElementById("demo").innerHTML =
String(x) + "<br>" +
String(123) + "<br>" +
String(100 + 23);
</script>
- 无论前面是什么函数,最后都会执行finally函数
finally {
document.getElementById("demo").value = "";
}
17.请输出一个 5 到 10 之间的数字
<input id="demo" type="text">
<button type="button" οnclick="myFunction()">测试输入</button>
<p id="message"></p>
<script>
function myFunction() {
var message, x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
try {
if(x == "") throw "值为空";
if(isNaN(x)) throw "不是数字";
x = Number(x);
if(x < 5) throw "太小";
if(x > 10) throw "太大";
}
catch(err) {
message.innerHTML = "错误: " + err;
}
}
debugger 关键字用于停止执行 JavaScript,并调用调试函数
禁止this关键字指向全局对象。
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未定义
18.HTML 表单自动验证
HTML 表单验证也可以通过浏览器来自动完成。
如果表单字段 (fname) 的值为空, required 属性会阻止表单提交:
点击提交按钮,如果输入框是空的,浏览器会提示错误信息。
.<form action="demo_form.php" method="post">
<input type="text" name="fname" required="required">
<input type="submit" value="提交">
</form>
19.下面的函数用来检查用户是否已填写表单中的必填(或必选)项目。假如必填或必选项为空,那么警告框会弹出,并且函数的返回值为 false,否则函数的返回值则为 true(意味着数据没有问题):
<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" οnsubmit="return validateForm()" method="post">
姓: <input type="text" name="fname">
<input type="submit" value="提交">
</form>
20.下面的函数检查输入的数据是否符合电子邮件地址的基本语法。
意思就是说,输入的数据必须包含 @ 符号和点号(.)。同时,@ 不可以是邮件地址的首字符,并且 @ 之后需有至少一个点号:
<script>
function validateForm(){
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
alert("不是一个有效的 e-mail 地址");
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo-form.php" οnsubmit="return validateForm();" method="post">
Email: <input type="text" name="email">
<input type="submit" value="提交">
</form>
21.输入数字并点击验证按钮:如果输入的数字小于 100 或大于300,会提示错误信息。
<input id="id1" type="number" min="100" max="300" required>
<button οnclick="myFunction()">验证</button>
<p id="demo"></p>
<script>
function myFunction() {
var inpObj = document.getElementById("id1");
if (inpObj.checkValidity() == false) {
document.getElementById("demo").innerHTML = inpObj.validationMessage;
} else {
document.getElementById("demo").innerHTML = "输入正确";
}
}
Property Description
checkValidity() 如果 input 元素中的数据是合法的返回 true,否则返回 false
setCustomValidity()
设置 input 元素的 validationMessage 属性,用于自定义错误提示信息的方法。
使用 setCustomValidity 设置了自定义提示后,validity.customError 就会变成true,则 checkValidity 总是会返回false。如果要重新判断需要取消自定义提示,方式如下:
setCustomValidity('')
setCustomValidity(null)
setCustomValidity(undefined)
- 输入数字并点击验证按钮,如果输入的数字大于 100 ( input 的 max 属性), 会显示错误信息。
<input id="id1" type="number" max="100">
<button οnclick="myFunction()">验证</button>
<p id="demo"></p>
<script>
function myFunction() {
var txt = "";
if (document.getElementById("id1").validity.rangeOverflow) {
txt = "输入的值太大了";
} else {
txt = "输入正确";
}
document.getElementById("demo").innerHTML = txt;
}
</script>
//rangeOverflow 设置为 true, 如果元素的值大于设置的最大值。
function myFunction() {
var txt = "";
var inpObj = document.getElementById("id1");
if(!isNumeric(inpObj.value)) {
txt = "你输入的不是数字";
} else if (inpObj.validity.rangeUnderflow) {
txt = "输入的值太小了";
} else {
txt = "输入正确";
}
document.getElementById("demo").innerHTML = txt;
}
// 判断输入是否为数字
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
23.ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量。
let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
24.重新定义变量
使用 var 关键字重新声明变量可能会带来问题。
在块中重新声明变量也会重新声明块外的变量:var x = 10; // 这里输出 x 为 10 { var x = 2; // 这里输出 x 为 2 } // 这里输出 x 为 2
let 关键字就可以解决这个问题,因为它只在 let 命令所在的代码块 {} 内有效:var x = 10; // 这里输出 x 为 10 { let x = 2; // 这里输出 x 为 2 } // 这里输出 x 为 10
- JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。
文本可以被任何编程语言读取及作为数据格式传递。
"sites":[ {"name":"Runoob", "url":"www.runoob.com"}, {"name":"Google", "url":"www.google.com"}, {"name":"Taobao", "url":"www.taobao.com"} ]
JSON 字符串转换为 JavaScript 对象
通常我们从服务器中读取 JSON 数据,并在网页中显示数据。
简单起见,我们网页中直接设置 JSON 字符串 (你还可以阅读我们的 JSON 教程):
首先,创建 JavaScript 字符串,字符串为 JSON 格式的数据:
var text = '{ "sites" : [' +
'{ "name":"Runoob" , "url":"www.runoob.com" },' +
'{ "name":"Google" , "url":"www.google.com" },' +
'{ "name":"Taobao" , "url":"www.taobao.com" } ]}';
然后,使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象:
var obj = JSON.parse(text);
<h2>为 JSON 字符串创建对象</h2>
<p id="demo"></p>
<script>
var text = '{ "sites" : [' +
'{ "name":"Runoob" , "url":"www.runoob.com" },' +
'{ "name":"Google" , "url":"www.google.com" },' +
'{ "name":"Taobao" , "url":"www.taobao.com" } ]}';
obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.sites[1].name + " " + obj.sites[1].url;
</script>
26.javascript:void(0) 中最关键的是 void 关键字, void 是 JavaScript 中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值。
语法格式如下:
void func()
javascript:void func()
<a href="javascript:void(0)">单击此处什么也不会发生</a>
27.
回调函数
回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成了这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,他自己会善始善终。
<p>回调函数等待 3 秒后执行。</p>
<p id="demo"></p>
<script>
function print() {
document.getElementById("demo").innerHTML="RUNOOB!";
}
setTimeout(print, 3000);
</script>