二、js中基础知识

时间:2024-09-27 13:36:14

  该篇文章主要是强化一下自己javaScript的基础,让写代码变得更轻松些。基础好的请忽略。
    JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,
为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
1、在HTML中嵌入js代码的两种方式:

1)插入在标签内部,写在事件句柄后面
<input type="button" value="亲,点击我" onclick="window.alert('hello world!')window.alert('hello')>
2)在独立的脚本块,其中可以编写js代码
<script type="text/javascript">
window.alert("hello world");
</script>
备注:<script>标签不一定出现在head标签中,可以出现在HTML页面中的任何位置

2、语法规范和书写规范

2.1、javaScript语法规范说明:
1)区分大小写;
2)其中的变量是弱类型;
3)每行结尾的分号可有可无,如果没有浏览器会自动加上
4){} 括号用于代码块
5) 注释方式和java和c语言相同 2.2、变量的书写规范:
1)首字符必须是字母(大小写均可)、下划线、美元符号
2)其余字母可以使下划线、美元符号、任意字母或者数字字符
3)变量名不能是关键字或者保留字
a、变量声明:var 变量名;
变量在声明的时候,没有使用var关键字,那么这个变量不管是定义在哪个位置上,都是全局变量
b、变量赋值:变量名=值;
js中的变量若没有显示的赋值,系统默认赋值underfined; underfined在js中是一个具体的值,表示未定义
c、一行上可以定义多个变量
var a,b,c=300;//变量a和变量b都是underfined,变量c是300
备注:
JavaScript也遵守就近原则,全局变量作用域是整个js程序,局部变量只作用于某个函数;
变量没有定义,直接访问会报错。[结果不是underfined];
变量定义之后没有赋值,系统默认赋值underfined;

3、函数语法格式:

    第一种方式:
function 函数名(形式参数列表){
函数体由JavaScript语句构成;
} 示例:
function testFun(){
//JS的函数执行结果之后的返回值类型是任意的,而且也可以不返回任何数据
//return 100;
//return false;
//return "abc";
} 第二种方式:
函数名 = function(形式参数列表){
函数体;
} 备注:
js中的函数没有重载机制,在统一个js代码中,函数名不能重名;
函数必须手动调用的时候才会执行;

4、js中的数据类型(5种):
4.1、String类型(字符串类型):包括具体的值:'a' 'bsdfasdfasef'

    js中没有字符类型,只有字符串类型(字符串这种数据类型的数据又可以称为”字符串对象“,虽然被称为字符串对象,但是字符串对象不属于Object类型)
String的属性
1)length属性:
字符串的名字.legth: 获取字符串长度
2)prototype属性:可以动态给String类型的数据扩展方法和属性
示例1:给所有String(字符串动态的扩展一个方法叫做doSome)
var ename="abdcdf";
alert(ename.length);//获取字符串长度
//以下是给所有String(字符串动态的扩展一个方法叫做doSome)
String.prototype.doSome=function(){
alert("dosome.....");
};
//调用doSome方法
ename.doSome();
3)String对象中的方法:
toLocaleLowerCase() 把字符串转换为小写。
toLocaleUpperCase() 把字符串转换为大写。
substr() 从起始索引号提取字符串中指定数目的字符。
substring() 提取字符串中两个指定的索引号之间的字符。注意不包括结束下标
replace() 替换与正则表达式匹配的子串。
示例1:
ename=ename.toUpperCase();
alert(ename);
示例2:以下替换的时候,只替换第一个”-“,如果想要全部替换的话,的多次使用replace。想要全部替换也可以,但是需要使用正则表达式
alert("1978-10-10".replace("-",",").replace("-",","));

4.2、Number类型:

Number数据类型的取值:包括具体的值:13、1.0、NaN,Infinity
1)1,3.0,123
2)NaN
NaN表示Not a Number,不是一个数字,但是NaN本身是一种Number数据类型,计算结果应该返回数字,但是最终结果不是数字的时候,
结果就是NaN
3)Infinity
infinity汉语意思是无穷无限大;除数是0的时候,结果一定是Infinity

4.3)Boolean 包括具体的值:ture false,

//boolean类型
var boo=true;
//表示的是字符串true
var boo="true"; var a=true;
var b=true;
alert(a==b);//true a="abc";
b="daf";
alert(a==b);//false a=true;
b=1;
alert(a==b);//true 1和true是等量关系
alert(a === b);//false 1和ture虽然是等量关系,但是数据类型不同 a=true;
b=true;
alert(a === b);//true

4.4)Object 包括具体的值:new Object(),new Date(), new Employee(),null.....

    js也是面向对象的编程语言;js中自定义的函数,函数名本身就是类名;
js中定义类的2种方法:
1)方法一:
function User(id,name){
//属性
//id,name都是user类的属性
this.id=id;
this.name=name;
//方法
this.shopping=function(){
alert(this.name+"is shopping");
};
}
//创建对象,类似java
var user=new User();
user.shopping(); user=new User(110,"zhangsan");
user.shopping(); 2)js中定义类的第二种方法:
Employee=function(id,name){
this.id=id;
this.name=name;
}
var e=new Employee(111,"lisi");
alert(e.id+","+e.name);
//给Employee动态扩展一个方法:
Employee.prototype.work=function(){
alert(this.name+"is working!");
};
//调用扩展的方法
e.work();

4.5)Undefined 包括具体的值:underfined    
    Undefined数据类型只有一个值,这个值就是underfined;只声明没有给变量赋值或者手动赋值undefined,变量的值都是undefined;
5、运算符
5.1、typeof运算符:typeof运算符在程序运行阶段动态判断变量的数据类型

1)如何使用:typeof 变量名
2)typeof 运算符运算结果是以下六种结果之一:
"undefined" "number" "string" "objcet" "boolean" "function"
备注:typeof运算结果是字符串类型
示例:
function sum(a,b){
if((typeof a)!="number" || (typeof b)!="number"){
alert("参数必须提供数字类型");
return;
}
//执行到此处说明参数类型正常
return a+b;
} typeof(1): number
typeof(NaN): number
typeof(Number.MIN_VALUE): number
typeof(Infinity): number
typeof("123"): string
typeof(true): boolean
typeof(window): object
typeof(document): object
typeof(null): object
typeof(eval): function
typeof(Date): function
typeof(sss): undefined
typeof(undefined): undefined
详述:
a、常规数字和特殊的数字的 typeof 返回值为number
javaScript中特殊的数字类型包括:
Infinity 表示无穷大特殊值
NaN            特殊的非数字值
Number.MAX_VALUE     可表示的最大数字
Number.MIN_VALUE     可表示的最小数字(与零最接近)
Number.NaN         特殊的非数字值
Number.POSITIVE_INFINITY 表示正无穷大的特殊值
Number.NEGATIVE_INFINITY 表 示负无穷大的特殊值
b、
对于字符串类型,typeof 返回的值是 string。比如typeof("123")返回的值是string。
对于布尔类型,typeof 返回的值是 boolean 。比如typeof(true)返回的值是boolean。
对于对象、数组、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。
对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。
如果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined。

5.2、JS中的= == ===的区别

=  赋值:
== 比较值是否相当
=== 比较值是否相同,同时要求数据类型也相同(更加严格)
underfined,null,NaN各自的数据类型不同:
alert(typeof underfined);//"underfined"
alert(typeof null);//"object"
alert(typeof NaN);//"number" underfined 和null属于:值相等
alert(underfined==null);//true
alert(null==NaN);//false
alert(underfined==NaN);//false

5.3void运算符

   void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值。
例如,从 HTML 的 <a> 元素调用 JavaScript 函数时。要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果
示例:
<a href="javascript:void(0);" onclick="alert('execute js code!')">
只执行一段js代码,不进行页面跳转,还想保留超链接的样式,需要使用void运算符
</a>

6、常见函数、单引号和双引号的使用、流程控制
6.1、常见函数
1)isNaN():该函数的作用是用来判断数据是否是一个数字,不是数字是true,是数字是false

 window.onload = function() {
var iNumber=Number(prompt("输入一个5到100之间的数字",""));
if(isNaN(iNumber)){
document.write("请确认您的输入正确");
}else if (iNumber>100||iNumber<5) {
document.write("您的输入的数字不在5和100之间");
}else {
document.write("您的输入的数字是"+iNumber);
}
}

2)parseInt():该函数将非数字转换成数字,不保留小数位

    var price="100";
price=parseInt(price);//将字符串price转换成Number类型的数字
alert(price+1);//
price="3.25";
price=parseInt(price);
alert(price+1);//4 自动进行了四舍五入;

3)parseFloat():该函数可以将非数组转化为数字,但是保留小数

    price="3.95";
price=parseFloat(price);
alert(price);//3.95

6.2、单引号和双引号的使用

1)只使用字符的字符串,单引号和双引号没有区别
2)在单引号包括的字符串中可以直接用双引号,在双引号包括的字符串中可以直接用单引号
<input type="button" onclick="alert("1")">-------------------不正确
<input type="button" onclick="alert('1')">-------------------正确
3)如果在双引号包括的字符串中用双引号,需要用反斜杠转义,注意是"\" ;同样在单引号包括的字符串中用单引号,也需要转义“\”
var str = "abc\"def\"ghi"
用反斜杠来禁止解析双引号
4)如果要用反斜杠,则输入‘\\’

6.3、流程控制
1)if else

window.onload = function() {
var iNumber=Number(prompt("输入一个5到100之间的数字",""));
if(isNaN(iNumber)){
document.write("请确认您的输入正确");
}else if (iNumber>100||iNumber<5) {
document.write("您的输入的数字不在5和100之间");
}else {
document.write("您的输入的数字是"+iNumber);
}
}

2)while

var i=isum=0;
while(i<=100){
isum +=i;
i++;
}
alert("isum-->"+isum);

7、数组的使用:初始化、赋值、遍历、数组中常用方法

1)静态初始化
var myArray=[1,2,3,44];
2)动态初始化
var myArray=new Array(5);//动态分配5个控件,没有手动赋值,系统默认赋值underfined
遍历:
for(var i=0;i<myArray.length;i++){
alert("elt:"+myArray[i]);//undefined
}
赋值:[js数组中的数据类型不一定统一]
myArray[0]=false;
myArray[1]="abc";
myArray[2]=1.0;
myArray[3]=new Object();
3)遍历
for(var i=0;i<myArray.length;i++){
alert("elment:"+myArray[i]);
}
4)数组中常用方法
a、join():以特殊符号链接数组中的每一个元素,最后生成一个字符串
var a=[1,'abc',false,3.0];
var str=a.join("-");
b、reverse():反转数组中的元素
a.reverse();
c、pop():其取值为:数组最后边的元素, 且执行后数组最右边的元素会被删除
d、push():添加元素
e、toString():取值为:数组的每个元素,且各个元素用, 隔开

8、JS对日期的处理

//获取系统当前日期
var nowTime=new Date();
alert("系统当前日期-->"+nowTime); //将系统时间转换成具有本地语言环境的时间
var strNowTime=nowTime.toLocaleString();
alert("本地语言环境的时间-->"+strNowTime); //可以获取日期的年月日时分秒,自己添加格式:
var year=nowTime.getYear();
alert("year-->"+year); //避免千年虫问题
year=nowTime.getFullYear();//这个方法更通用
alert("FullYear-->"+year); //获取毫秒:getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。
var time=nowTime.getTime();
alert(time);

9、js中的事件
9.1、onload事件
页面加载的时候就自动显示出当前系统的时间,并且每隔一秒钟刷新一下页面

<script type="text/javascript">
//onload事件句柄需要编写到body标签中
function displayTime(){
//1.获取div元素
var timeDiv=document.getElementById("timeDiv");
//2.获取系统时间
var nowTime=new Date();
var strNowTime=nowTime.toLocaleString();
//3.将系统时间设置到div元素中
//innerHTML属性用来 设置或返回行的开始标签和结束标签之间的 HTML
timeDiv.innerHTML=strNowTime;
}
//4.每隔1秒调用displayTime函数
function start(){
//设置每隔特定时间执行特定函数
window.setInterval("displayTime()",1000);
}
</script>

9.2、onclick事件(涉及div和span、innerHTML和innerText区别)

<html>
<head>
<title>使用js的DOM操作div和span元素</title>
<script type="text/javascript">
/*
1、innerHTML
用法一:将后面的字符串当做HTML代码解释并且执行
divElt.innerHTML="<font color='red'>hello World</font>"; 效果为将hello World字体颜色置为红色显示出来
用法二:显示标记之间得所有内容,包括代码本身
alert(divElt.innerHTML);效果为 <font color='red'>hello World</font>
2、innerText:即使后面指定的字符串是HTML代码,也只是当做普通字符串来处理
divElt.innerText="<font color='red'>测试</font>";效果为:<font color='red'>测试</font>
3、div会独占一行,span被用来组合行内元素
*/
function setDiv(){
//获取div元素
var divElt=document.getElementById("myDiv");
//可以通过innerHTML属性设置元素中的HTML代码,也可以获取该元素中的HTML代码
//divElt.innerHTML="<font color='red'>hello World</font>";
divElt.innerText="<font color='red'>测试</font>";
//获取div元素中的HTML代码
alert(divElt.innerHTML);//当为:<div id="myDiv"></div> 结果为: <font color='red'>hello World</font>
}
</script>
</head>
<body id="body1">
<input type="button" value="设置div中的文本" onclick="setDiv();" />
<!-- <div id="myDiv"></div> -->
<span id="myDiv"></span>
</body>
</html>

9.3、失去焦点事件onblur(涉及正则表达式简单应用)

<html>
<head>
<title>正则表达式</title>
<script type="text/javascript">
/*
1、正则表达式是一门独立的学科,和任何编程语言无关,
最初使用在医学方面,表示神经传输符号,在现代计算甲编程中也可以使用大量的正则表达式
2、在编程中使用正则表达式最主要是用来做字符串模式匹配的。尤其在JavaScript中使用正则表达式居多
3、在正则表达式中规定了一些特殊的符号,每一个符号都具有特殊的含义
4、在实际开发中我们可以从网络中搜索相关的常用的正则表达式,直接使用
但是使用前,需要进行反复的测试;javaScript程序员更应该研究在js中如何使用正则表达式而不是研究正则表达式该如何写
5、常见的正则表达式符号:
^ 字符串的开始
& 字符串的结束
\s 空白
+ 出现1-N次
* 出现0-N次
{2,5} 出现[2-5]次
? 出现至少1次
[0-9] 0-9的数字任意出现一个
[0-9a-zA-Z]{3,} 0-9a-zA-Z 之前的字符至少出现3次 6、在js中怎么创建正则表达式对象?正则表达式对象中那个方法最常用?
创建正则表达式对象有两种方式:
第一种方式:【常用】
var regexp=/正则表达式/flag;
第二种方式:
var regexp=new RegExp("正则表达式","flag"); 注:flag可选值:i、g、m
i:忽略大小写
g:当前行所有数据
m:支持多行搜索
i,g,m 可以合并使用
正则表达式对象中有一个很重要的方法:叫做test
语法格式:
var regexp=/正则表达式/;
var retValue=regexp.test(字符串);
retValue的值可能是true;true表示正则表达式符合正则表达式
retValue的值也可能是false;false表示正则表达式不符合正则表达式 */
function checkEmail(email){
//这个也是重点:
var reg = new RegExp("^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$"); //正则表达式对邮箱地址格式验证
alert(email);
var ok=reg.test(email);//正则表达式有一个test()方法
var emailError=document.getElementById("emailError");
if(ok){
emailError.innerHTML="";
}else{
emailError.innerHTML="<font color='red'>邮箱地址格式错误</font>";
} }
</script>
</head>
<body>
邮箱地址<input type="text" name="email" onblur="checkEmail(this.value);" />
<span id="emailError"></span>
</body>
</html>

9.4、获取焦点事件onfocus(登录表单验证)

<!DOCTYPE html>
<html>
<head>
<title>表单验证.html</title>
</head>
<body>
<script type="text/javascript">
/*
验证功能描述:
1、用户名不能为空
2、用户名长度6-14
3、密码不能为空
4、密码至少6位
5、密码和确认密码必须一致
*/
String.prototype.trim=function(){
return this.replace(/^\s+/,"").replace(/\s+&/,"");
};
function checkName(username){
var ok=false;
username=username.trim();//去除前后的空白
var nameError=document.getElementById("nameError");
if(username==""){
nameError.innerHTML="<font color='red'>用户名不能为空</font>";
ok=false;
}else if(username.length<6 || username.length>14){
nameError.innerHTML="<font color='red'>用户名长度必须6-14</font>";
ok=false;
}else{
nameError.innerHTML="";
ok=true;
}
return ok;
}
function clearNameError(){
var nameError=document.getElementById("nameError");
nameError.innerHTML="";
}
function checkUserpswd(){
var ok=false;
var pswdError=document.getElementById("pswdError");
if(pswd==""){
pswdError.innerHTML="<font color='red'>密码不能为空</font>";
ok=false;
}else if(pswd.length<6){
pswdError.innerHTML="<font color='red'>密码不能少于6位</font>"
ok=false;
}else{
pswdError.innerHTML="";
ok=true;
}
return ok;
}
function clearPswdError(){
var pswdError =document.getElementById("pswdError");
pswdError.innerHTML="";
}
function isSame(){
var ok=false;
//获取密码
var userpswd=document.getElementById("userpswd").value;
//获取确认密码
var confirmpswd=document.getElementById("confirmpswd").value;
//比较
var confirmPswdError=document.getElementById("confirmPswdError");
if(userpswd != confirmpswd){
confirmPswdError.innerHTML("<font color='red'>密码和确认密码不一致"</font>);
ok=false;
}else{
pswdError.innerHTML="";
ok=true;
}
return ok;
}
function clearSameError(){
var confirmPswdError=document.getElementById("confirmPswdError");
pswdError.innerHTML="";
}
function checkAll(){
var username=document.getElementById("username").value;
var userpswd=document.getElementById("userpswd").value
if(checkName(username) && checkUserpswd(userpswd) && isSame()){
document.forms["userForm"].action="http://localhost:8080/oa/register";
document.forms["userForm"].method="get";
document.forms["userForm"].submit();
}
}
</script>
<form name="userForm">
用户名
<input
type="text"
id="username"
name="username"
onblur="checkName(this.value);"
onfocus="clearNameError();"
/>
<span id="nameError"></span>
<br>
密码
<input
type="password"
id="userpswd"
name="userpswd"
onblur="checkUserpswd(this.value);"
onfocus="clearPswdError();"/>
<br>
<span id="pswdError"></span>
确认密码
<input
type="password"
id="confirmpswd"
name="confirmpswd"
onblur="isSame();"
onfocus="clearSameError()"/>
<span id="confirmPswdError"></span>
<br>
<input type="button" value="注册" onclick="checkAll()">
</form>
</body>
</html>

9.5、表单提交事件onsubmit

<html>
<head>
<title>表单验证</title>
<!--
1、表单验证的时候,尽量不要在点击注册按钮的时候才验证,最好用户填写一个
验证一个,这样设计比较人性化。
2、表单提交事件:submit,事件句柄:onsubmit,这个事件句柄需要编写到form标签中
<form onsubmit="return true;">提交表单
<form onsubmit="return true;">不提交表单
-->
</head>
<body>
<script type="text/javascript">
var usernameOk=false;
function checkUsername(username){
//alert(username);
//验证用户名不能为空
//if(username.length==0){}
var usernameErrorMsg=document.getElementById("usernameErrorMsg");
}
function checkUserName(username){
var usernameErrorMsg=document.getElementById("usernameErrorMsg");
if(username=="usernameErrorMsg"){
usernameErrorMsg.innerHTML="<font color='red'>用户名不能为空</font>";
}else if(username.lenght<6 || username.length>14){
usernameErrorMsg.innerHTML="<font color='red'>用户名长度必须在[6-14]之间</font>";
}esle{
usernameErrorMsg.innerHTML="";
usernameOk=ture;
}
}
function cleckNameError(){
var usernameErrorMsg=document.getElementById("usernameErrorMsg");
usernameErrorMsg.innerHTML="";
}
function checkAll(){
return false;
}
</script>
<form
name="username"
method="get"
action="http://localhost:8080"
onsubmit="return checkAll();">
用户名
<input
type="text"
name="username"
onblur="checkUserName(this.value);"
onfocus="cleckNameError();"/>
<!--
其中的this代表文本框对象,
-->
<span id="usernameErrorMsg"></span><br>
<input type="submit" value="注册" />
</form>
</body>
</html>

10、js中的DOM对象和BOM对象
10.1、DOM对象:创建元素,并追加元素

<html>
<head>
<title>js中通过DOM创建元素,并追加元素</title>
<script type="text/javascript">
function addElt(){
//alert("test");
//向div节点中追加一个子节点font
//1、获取div节点
var myDiv=document.getElementById("myDiv");
//2、创建font节点
var fontElt=document.createElement("font");//重点方法
fontElt.innerHTML="测试";
fontElt.color="red";
//3、将font节点追加到div节点中
myDiv.appendChild(fontElt);//重点方法
}
</script>
</head>
<body>
<input type="button" value="给div添加font标签" onclick="addElt();" />
<div id="myDiv">
</div>
</body>
</html>

document.location.href="http://www.baidu.com";
document.location="http://www.baidu.com";

10.2、BOM对象:window是BOM对象(Browser Object Model),代表整个浏览器窗口

BOM对象:window是BOM对象(Browser Object Model),代表整个浏览器窗口
window对象中的函数:eval()、open()、setInterval()、window.alert()、window.confirm()、window.open()
window.location.href="http://www.baidu.com"
window.location="http://www.baidu.com"

1)eval函数

<!DOCTYPE html>
<html>
<head>
<title>eval函数</title>
<script type="text/javascript">
//eval函数的作用:将普通字符串当做js代码解释执行
window.eval("var i=100;")
//以上的程序等同于 var i=100;
alert(i);
/*
重点:
java程序连接数据库之后,查询数据然后拼接成一个json格式的字符串发送给浏览器,浏览器只是接受到一个普通的json格式的字符串,然后在js中
使用eval函数,将json格式的字符串转换成json对象
*/
var javaSendStr="var o={\"usercode\":110,\"username\":\"zhangsan\"};";
window.eval(javaSendStr);
alert(o.usercode+","+o.username);
</script>
</head>
<body>
</body>
</html>

API地址: https://www.w3cschool.cn/javascript/js-window.html