JavaScript 基础

本文介绍JavaScript的基础知识,涵盖JS与HTML的结合方式、数据类型、流程控制等,详解基本对象如Function、Array及Date等的使用,并涉及DOM和BOM的概念与操作。

JavaScript 基础

<1> 简介

JavaScript 是运行在浏览器的脚步语言, 可控制html元素, 实现特定功能, 无需编译即可运行.
常见浏览器脚本语言: JavaScript, ScriptEase, JScript
JavaScript (JS) = ECMAScript(统一标准) + BOM + DOM

<2> ECMAScript

1.JS 与 HTML 结合方式

(1) 内部JS
定义script标签, 标签体内容是JS代码
(2) 外部JS
定义script标签, 使用src属性引入JS文件
注意:

① script 标签可以定义在任意位置, 但是建议写在 body 中的尾部
② script 标签可以定义多个
③ script 标签按照顺序依次执行

2.注释

单行: //注释
多行: /*注释 */

3.数据类型

(1) 原始 (基本) 数据类型:

number: 数字: 整数 小数 NaN
string: 字符串
boolean: trur false
null: 空的占位符
underfined: 未定, 若未初始化, 则默认赋值 underfined

(2) 引用数据类型: 对象

4.变量

(1) 强类型: 定义空间时定义固定的储存的数据类型
(2) 弱类型: 定义空间时不定义固定的储存的数据类型, 可存放任意类型

var 变量 = 内容 //定义变量
document.write(变量名+"<br>") //输出变量并换行

注意:

java 是强类型, JS 是弱类型
null 在 typeof 命令中被认为是 object 类

5.运算符

(1) 一元运算符
++, – , + (正号)
注意:

+ - 号运算中, 若JS中运算符不是运算符搜要求的类型, JS 会将其进行类型转换
==============================================================================
string 转 number: 按照字面值转化, 若不是数字则转化为 NaN
boolean 转 number: true为1, false为0

(2) 算数运算符
+, - ,* , / , %
(3) 赋值运算符
= , += , -+
(4) 比较运算符

>  <  >=  <=  ===
注:
类型相同的,根据ASCII码比较
类型不同的比较: 先进行类型转化再比较
==============================================================================
“==”先转化类型再比较;“===”不转化类型,类型不同直接返回False

(5) 逻辑运算符
&& , || , !

注:
number: 0和NaN为假, 其余为真
string: 除空字符串(""), 其余都是true
null&undefined: 都是false
对象: 所有对象都是true

(6) 三元运算符
? : (同C/JAVA)

var c=a>b? 1:2
true则取值11, false则取值22

6. 流程控制语句 (与Java类似)

(1) if…else
(2) switch
在 JS 中, 可以接受任意数据类型
(3) while
(4) do…while
(5) for

7.基本对象

(1) Functuion 对象
  1. 基本用法
var fun =new new Function (形式参数. 方法体)function 方法名称(形式参数列表)[
      方法体
  }var 方法名 = function(形式参数列表){
  	  方法体
  } 

fun.length: fun函数的参数个数

2.特点:
① 方法定义是,形参的类型不用写,返回值类型也不写。
② 方法是一个对象,如果定义名称相同的方法,会覆盖
③ 在JS中,方法的调用只与方法的名称有关,和参数列表无关
④ 在方法声明中有一个隐藏的内置对象 (数组),arguments, 封装所有的实际参数, 但根据形参数量传递 (多于形参元素的部分不传递)

(2) Array 数组
  1. 创建
var arr1=new Array(1,2,3,"m",true,"哇哇哇");
var arr2=new Array(5); //定义长度为 5 的数组
var arr3= [1,2,9,,true,"呜呜呜"];
document.write(arr1+"<br>"+arr2+"<br>"+arr3);
  1. 方法
    join(参数):将数组中的元素按照指定的分隔符拼接为字符串
document.write(arr.join("--")+"<br>");
     push()	向数组的末尾添加一个或更多元素,并返回新的长度。
  1. 属性
    length : 长度
  2. 特点
    JS 中数组元素长度和类型可变, 类似 JAVA 中的集合
(3) Date 日期
  1. 创建:
    var date = new Date();
  2. 方法:
    date.toLocaleString(): 返回字符串格式的本地时间
    date.getTime(): 获取毫秒值, 返回当前时间到1970年1月1日零点的毫秒值差
(4) Math 数学类 (不用创建, 直接使用)

random():返回 0 ~ 1 之间的随机数。[ 0 , 1 )
ceil(x):对数进行上舍入。
floor(x):对数进行下舍入。
round(x):把数四舍五入为最接近的整数。

取 [1 , 100] 随机整数:

var number = Math.floor((Math.random()*100))+1;
(5) RegExp 正则表达式

<1> 正则表达式:定义字符串的组成规则。(字符串中 “\” 表示转义, 需使用 “\\” )
1. 单个字符:[]
如: [a] [ab] [a-zA-Z0-9_]
* 特殊符号代表特殊含义的单个字符:
\d:单个数字字符 [0-9]
\w:单个单词字符[a-zA-Z0-9_]
2. 量词符号:
?:表示出现0次或1次
*:表示出现0次或多次
+:出现1次或多次
{m,n}:表示 m<= 数量 <= n
* m如果缺省: {,n}:最多n次
* n如果缺省:{m,} 最少m次
3. 开始结束符号
* ^:开始
* $:结束
<2> 正则对象:
1. 创建
1. var reg = new RegExp(“正则表达式”);
2. var reg = /正则表达式/;
2. 方法
1. test(参数):验证指定的字符串是否符合正则定义的规范

(6) Global 全局变量

<1>功能: 转化字符串与 URL 编码
注: 全局变量, 不需要调用即可使用
方法:
① encodeURI: 编码
decodeURI: 解码
② encodeURIComponent: 编码
decodeURIComponent: 解码
区别: ①只转换中文和特殊字符, ②转换包括符号在内的全部内容, 通常建议使用②;
encode 在客户端执行; decode 在服务器端执行

    var str = "http://www.baidu.com?wd=我真菜!";
    var encode = encodeURI(str);
    document.write(encode +"<br>");
    var s = decodeURI(encode);
    document.write(s +"<br>");
    document.write("=============================================<br>");
    var str2 = "http://www.baidu.com?wd=我真菜!";
    var encode2 = encodeURIComponent(str2);
    document.write(encode2 +"<br>");
    var s2 = decodeURIComponent(encode2);
    document.write(s2 +"<br>");

结果:

http://www.baidu.com?wd=%E6%88%91%E7%9C%9F%E8%8F%9C!
http://www.baidu.com?wd=我真菜!
=============================================
http%3A%2F%2Fwww.baidu.com%3Fwd%3D%E6%88%91%E7%9C%9F%E8%8F%9C!
http://www.baidu.com?wd=我真菜!

方法:
<2> parseInt(): 将字符串的数字部分转成数字,

<3> isNaN() 判断是否为NaN, 并返回 Boolean
注: NaN 参与的所有比较(==)均为 False

<4> eval() 将字符串形式的JS语句识别并执行

8. 特殊语句 (相比于Java的不同点, 但不建议使用)

(1) 单条语句结尾可以省略分号
(2) 定义变量时, 使用var关键字, 定义的是局部变量; 不使用, 定义的是全局变量

<3> DOM

1.简介

DOM → Document Object Model → 文档对象模型
它可以动态地访问程序和脚本, 并更新其内容、结构

2.核心

核心 DOM - 针对任何结构化文档的标准模型
Document: 文档对象
Element: 元素对象
Attribute: 属性对象
Text: 文本对象
Comment: 注释对象
Node: 节点对象,其他 5 个的父对象

3.文档对象

(1) 获取页面标签(元素)对象:获取 Element 对象

document.getElementById("id值"): 通过元素的id获取元素对象

  • Element 对象可修改属性值和标签体内容

    修改标签体内容:
    1. 获取元素对象
    2. 使用 innerHTML 属性修改标签体内容

<h1 id="0">我太厉害了!</h1>
=====================================================
 var ab=document.getElementById("0");
 ab.innerHTML="我太菜了!";

getElementsByTagName(): 根据元素名称获取元素对象们。返回值是一个数组
getElementsByClassName(): 根据Class属性值获取元素对象们。返回值是一个数组
getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组

(2) 操作 Element 对象

① 修改属性值:

  1. removeAttribute(): 删除属性
  2. setAttribute(): 设置属性

注: 直接在对象的后面 “.” 就可以改变对象的属性

var element_a = document.getElementsByTagName("a")[0];  //由于获取到的变量是数组, 仅仅取其首元素[0]即可
element_a.setAttribute("href","https://www.baidu.com");

4.节点对象

(1)简介

节点对象,其他5个的父对象; 所有dom对象都可以被认为是一个节点
★ 补充知识:

在超链接中, 只设置超链接样式而不实现跳转功能 (" " 为刷新当前页面) 的写法为: 
<a href="javascript:void(0);" id="add">
(2) 方法

appendChild(): 向节点的子节点列表的结尾添加新的子节点。
removeChild() : 删除(并返回)当前节点的指定子节点。
replaceChild(): 用新节点替换一个子节点。
parentNode: 返回节点的父节点。

<4> BOM

(1)简介

概念: 浏览器对象模型, 处理浏览器各部分的对象模型.
组成:
Window : 窗口对象
Navigator : 浏览器对象 (不重要)
Screen : 屏幕显示器对象 (不重要)
History : 历史记录对象
Location : 地址栏对象

(2)Window 窗口对象

  1. 弹出框
    ① alert() : 显示带有一段消息和一个确认按钮的警告框
    ② confirm() : 显示带有一段消息以及确认按钮和取消按钮的对话框 (确认按钮返回 true, 取消按钮返回 false )
    ③ prompt() : 显示可提示用户输入的对话框, 返回用户输入的值

注: window 对象用变量接收可用于执行不同的操作

    var a=confirm("133");
    if(a) {document.write("123456789");}
    else {document.write("abcdefghijk");}
=============================================================
    var result =  prompt("请输入");
    alert(result+"tgyuiojpk");

=====================================================================

	var result=prompt("请输入:");
	alert(result);
  1. 打开, 关闭窗口
<input id="openBtn" type="button" value="打开窗口">
<input id="closeBtn" type="button" value="关闭窗口">
		//打开新窗口
        var openBtn = document.getElementById("openBtn");
        var newWindow;
        openBtn.onclick = function(){
            //打开新窗口
            newWindow = open("https://www.baidu.com");
        }

        //关闭新窗口
        var closeBtn = document.getElementById("closeBtn");
        closeBtn.onclick = function(){
           // 关闭新窗口
            newWindow.close();
        }

(3) 定时器

  1. 一次性定时器
    setTimeout(fun(),2000);
    function fun(){
      alert('boom~~');
    }
  1. 循环定时器
    setInterval(fun(),2000);
    function fun(){
      alert('boom~~');
    }
  1. 取消定时器:
    一次性定时器: clearTimeout()
    循环定时器: clearInterval()
    注: 括号内的参数传递定时器返回的变量

★ 实例: 轮播图

	<img src="img/pic1.jpg" width="100%" height="100%" id="image">
	<script>
		var i=1;
		function f(){
		    //i++;
            var im =document.getElementById("image");
            if(i>4) i=1;//一共四张图
            im.src="img/pic"+(++i)+".jpg";
		}
		//以下是定时器
		setInterval(f,"2000");
	</script>
4. Window 属性
  1. 获取其他 BOM 对象
    history
    location
    Navigator
    Screen
  2. 其他 DOM 对象
    document
5. Location 地址栏对象
  1. 创建(获取):window.location 或 location
  2. 方法:
    reload() 重新加载当前文档。刷新
    href 设置或返回完整的 URL (超链接)。

★实例: 5 秒自动跳转

<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<style>
		p{text-align: center;}
		span{color: deeppink;}
	</style>
	<script>
		var i=5;
		function time(){
			i--;
			var n= document.getElementById("number");
			if(i<=0){location.href="https://www.baidu.com";}
			n.innerHTML = i;
		}
		setInterval(time,1000);
	</script>
</head>
<body>
	<p>
		<span id="number">5</span>&nbsp;秒后跳转
	</p>
</body>
6.History 历史记录对象
  1. 创建(获取):
    1. window.history
    2. history

  2. 方法:
    back() 加载 history 列表中的前一个 URL。
    forward() 加载 history 列表中的下一个 URL。

  go(参数)	加载 history 列表中的某个具体页面。
       参数:
                * 正数:前进几个历史记录
                * 负数:后退几个历史记录
  1. 属性:
    length 返回当前窗口历史列表中的 URL 数量。

<5> 事件

(1) 事件简介

事件定义: 当某些组件执行某项操作时, 触发代码

(2) 点击事件

onclick: 定义鼠标单击击后的操作

var light = document.getElementById("light");
light2.onclick = fun; //在外部定义fun函数

ondblclick: 双击事件

(3) 焦点事件

onblur: 失去焦点 (鼠标或光标移动到之外, 常用于表单校验)
onfocus: 元素获得焦点。

(4) 加载事件:

onload: 一张页面或一幅图像完成加载。

(5) 鼠标事件:

onmousedown 鼠标按钮被按下。
onmouseup 鼠标按键被松开。
onmousemove 鼠标被移动。
onmouseover 鼠标移到某元素之上。
onmouseout 鼠标从某元素移开。

(6) 键盘事件:

onkeydown 某个键盘按键被按下。
onkeyup 某个键盘按键被松开。
onkeypress 某个键盘按键被按下并松开。

(7) 选择和改变

onchange 域的内容被改变。
onselect 文本被选中。

(8) 表单事件

onsubmit 确认按钮被点击。
onreset 重置按钮被点击。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂糊Java汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值