JavaScript入门

一、JavaScript的定义

JavaScript 是一种轻量级的、解释型的编程语言,广泛应用于网页前端开发中。它可以与 HTML 和 CSS 协作,动态地修改网页内容、响应用户操作并与服务器通信。

二、JavaScript的组成

  • ECMAScript:ECMA(欧洲计算机协会)制定了JS的基本语法
  • BOM(没有标准):浏览器对象模型,主要实现对浏览器窗口的一些操作
  • DOM(重点):文档对象模型,主要实现对HTML文档的增、删、改、查

三、JavaScript的引入HTML的方式

引入方式代码备注
行内式<p  οnclick="alert('Hello, World!')">
内部式<script> 与 </script>
外链式<script src="script路径"></script>重点

四、JavaScript的基本语法

1.注释

注释注释代码
单行注释// 注释内容
多行注释/* 注释内容 */

2.输入/输出

  • 获取用户输入:prompt() ——一般不用   
  • 弹出提示窗:alert()
  • 输出到控制台:console.log()
  • 输出到页面上:document.write()

3.数据类型和变量声明

  • 原始数据类型
    • string:字符串
    • number:数字类型
    • boolean:布尔类型
    • null:表示对象引用为空
    • undifined:未定义类型
  • 引用数据类型:如Object、Array等
  • 类型检测:typeof
  • 变量声明:JavaScript是弱类型语言,不重视数据类型的定义,但是js会根据为变量赋值情况自定判断该变量是什么类型
    • var——(默认不写为var) :定义的变量一定是全局变量
    • let:如果定义在局部代码块则是局部变量
    • const:定义常量,因此一定要初始化,同时也有块级作用域的使用范围。
  • 尽量使用const来声明变量,这可以让代码更安全,避免无意中修改变量值导致的错误。

  • 在不需要常量的情况下,使用let来声明变量,以利用其块级作用域的特性。

  • 避免使用var,因为它可能会导致意外的全局变量声明或其他作用域问题。

  • 运算符
运算类型运算符
算数运算符+ - * / % ++ --
赋值运算符= += -= *= /= %=
比较运算符== === != !== > < >= <=
逻辑运算符&& || !
三元运算符条件?表达式1:表达式2

五、流程控制

1.if语句

//分支语句
if(boolean类型){
    //代码块;
}else if(boolean类型){
    //代码块;
}else{
    //代码块;
}

2.for语句

//普通for循环语句
for(var i = 0;i<3;i++){
    //执行代码块
}
//for···of循环——输出结果1 6 9
let arr = [1,6,9];
for(let s of arr){
	console.log(s);
}
//for···in循环——输出结果0 1 2
for(let index in arr){
	console.log(index);
}

3.while语句

while(条件表达式){
    //循环代码块
}

六、数组

1.定义

JavaScript 中的数组对象用于在单个变量名下存储多个元素。数组可以包含不同的数据类型,并且可以动态调整大小。数组的索引从 0 开始。

2.初始化

//静态初始化1
var array = [1,2,3];
//静态初始化2
var arr2 = new Array(1,2,3);
//动态初始化
var arr1 = new Array(5);

3.方法

方法代码备注
压入元素到尾部push()
弹出尾部的一个元素,返回值为数组最后一个元素pop()
压入元素到头部unshift()
弹出头部的元素,返回值为数组第一个元素shift()
可添加,可删除splice()常用

七、函数

1.定义函数的方式

  • 函数声明
function 函数名(参数) {
  // 函数体
}
  • 函数表达式
const functionName = function(参数) {
  // 函数体
};
  • 箭头函数
const functionName = (参数) => {
  // 函数体
};

八.DOM文档对象模型

1.定义

DOM 是 Document Object Model(文档对象模型),是W3C组织推荐的处理HTML文档的标准编程接口, 通过这些接口可以改变网页的内容、结构和样式,实现对页面中元素的增、删、改、查操作; 由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM。

2.DOM树的概念

  • 文档:一个页面就是一个文档,DOM中使用document表示
  • 节点:网页中所有的内容都是节点(标签、属性、文本、注释等),DOM中使用node表示。而node至少有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性
  • 元素:页面中所有标签都是元素,DOM中使用element表示

3.DOM操作

3.1获取节点——重点

  • 通过id获取:getElementById()——返回值是元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let id = document.getElementById("get-id");
            console.log()
        }
    </script>
</head>
<body>
    <div id="get-id"></div>
</body>
</html>

效果如下:

  • 通过标签名获取:getElementByTagName()——返回值是集合
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let div = document.getElementsByTagName("div");
            console.log(div);
            // 可使用普通for循环遍历div
            for (var i = 0; i < div.length; i++) {
                console.log(div[i]);
            }
            // 可使用for of循环遍历div
            for(d of div){
                console.log(d)
            }
        }
    </script>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</body>
</html>

效果图如下:

  • 通过Class名获取:getElementByClassName()——返回值是集合
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let div = document.getElementsByClassName("div-class");
            console.log(div);
            // 可使用普通for循环遍历div
            for (var i = 0; i < div.length; i++) {
                console.log(div[i]);
            }
            // 可使用for of循环遍历div
            for(d of div){
                console.log(d)
            }
        }
    </script>
</head>
<body>
    <div class="div-class">1</div>
    <div class="div-class">2</div>
    <div class="div-class">3</div>
    <div class="div-class">4</div>
</body>
</html>

效果图如下:

  • 通过name属性获取:getElementByName()——返回值是节点列表
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let div = document.getElementsByName("div-class");
            console.log(div);
            // 可使用普通for循环遍历div
            for (var i = 0; i < div.length; i++) {
                console.log(div[i]);
            }
            // 可使用for of循环遍历div
            for(d of div){
                console.log(d)
            }
        }
    </script>
</head>
<body>
    <div name="div-class">1</div>
    <div name="div-class">2</div>
    <div name="div-class">3</div>
    <div name="div-class">4</div>
</body>
</html>

效果图如下:

  • 返回满足条件的第一个元素:querySelector()——返回值是元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let id = document.querySelector("#div-id");
            console.log(id);
            let classes = document.querySelector(".div-class");
            console.log(classes);
            let div = document.querySelector("div");
            console.log(div)
        }
    </script>
</head>
<body>
    <div class="div-class">1</div>
    <div class="div-class">2</div>
    <div id="div-id">3</div>
    <div name="div-name">4</div>
    <div name="div-name">5</div>
</body>
</html>

效果图如下:

  • 返回满足条件的所有元素:querySelectorAll()——返回值是节点集合
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let id = document.querySelectorAll("#div-id");
            console.log(id);
            for(i of id ){
                console.log(i);
            }
            let classes = document.querySelectorAll(".div-class");
            console.log(classes);
            for(c of classes ){
                console.log(c);
            }
            let div = document.querySelectorAll("div");
            console.log(div)
            for(d of div ){
                console.log(d);
            }
        }
    </script>
</head>
<body>
    <div class="div-class">1</div>
    <div class="div-class">2</div>
    <div id="div-id">3</div>
    <div name="div-name">4</div>
    <div name="div-name">5</div>
</body>
</html>

效果图如下:

  • 获取父元素:parentElement——返回值是元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let child = document.querySelectorAll(".child");
            console.log(child[0].parentElement);
        }
    </script>
</head>
<body>
    <div id="father">
        <div class="child"></div>
    </div>
</body>
</html>

效果图如下:

  • 获取所有子元素节点:children——返回值是集合
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let father = document.querySelector("#father");
            console.log(father.children);
        }
    </script>
</head>
<body>
    <div id="father">
        <div class="child"></div>
    </div>
</body>
</html>

效果图如下:

  • 获取第一个子元素节点:firstElementChild;获取最后一个子元素节点:lastElementChild
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let father = document.querySelector("#father");
            console.log(father.firstElementChild);
            console.log(father.lastElementChild);
        }
    </script>
</head>
<body>
    <div id="father">
        <div class="child">1</div>
        <div class="child">2</div>
        <div class="child">3</div>
        <div class="child">4</div>
    </div>
</body>
</html>

效果图如下:

  • 返回指定元素的前一个兄弟元素:previousElementSibling;返回指定元素之后的下一个兄弟元素:nextElementSibling
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <script>
        window.onload = function(){
            let child = document.getElementsByClassName("child");
            let childTwo = child[1];
            console.log(childTwo.previousElementSibling);
            console.log(childTwo.nextElementSibling);
        }
    </script>
</head>
<body>
    <div id="father">
        <div class="child">1</div>
        <div class="child">2</div>
        <div class="child">3</div>
        <div class="child">4</div>
    </div>
</body>
</html>

效果图如下:

3.2修改DOM节点——重点

  • 修改标签中的内容
    • innerHTML——识别html标签和文本
    • innerText——识别文本
  • 修改CSS
    • 行内样式修改:节点.style.样式名 = 值
    • 添加新的样式,并保留原有样式:元素节点.classList.add("className")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
    <style>
        .red{
            color: red;
        }
        .yellow{
            color: yellow;
        }
    </style>
    <script>
        window.onload = function(){
            let child = document.getElementsByClassName("child");
            let childTwo = child[1];
            childTwo.classList.add("yellow");
        }
    </script>
</head>
<body>
    <div id="father">
        <div class="child">1</div>
        <div class="child red">2</div>
        <div class="child">3</div>
        <div class="child">4</div>
    </div>
</body>
</html>

    • 修改元素的class属性:元素节点.className = 'className'
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>index</title>
        <style>
            .red{
                color: red;
            }
        </style>
        <script>
            window.onload = function(){
                let child = document.getElementsByClassName("child");
                let childTwo = child[1];
                childTwo.className = "red";
            }
        </script>
    </head>
    <body>
        <div id="father">
            <div class="child">1</div>
            <div class="child">2</div>
            <div class="child">3</div>
            <div class="child">4</div>
        </div>
    </body>
    </html>
    • 修改元素自有属性:元素节点.属性名=新值
    • 自定义或原有属性操作:
      • 为元素新增自定义属性:setAttribute(‘属性名’,‘值’)
      • 获取自定义属性的值:getAttribute(‘属性名’)
      • 从元素上移除自定义属性:removeAttribute(‘属性名’)

    3.3插入DOM节点

    • 先创建新节点——实际上就是在创建一个新的DOM树:document.createElement(标签名)
    • 插入节点——将DOM树结合
      • 在某个节点下添加子节点:父节点.appendChild(子节点)
      • 将指定节点前插入指定节点前:父节点.insertBefore(新节点, 被指定节点);

    3.4删除DOM节点

    • 通过父节点删除该父节点下的指定子节点:父节点.removeChild(子节点);
    • 直接删除子节点:要删除的节点.remove();

    九.监听事件

    1.事件的三要素

    • 事件源——(谁)
    • 事件类型——(因何触发)
    • 事件处理程序——(事件发生后要做什么)

    2.常见的监听事件

    • blur:失去焦点

    • focus:获取焦点

    • input:用于监听input、textarea、select等元素中内容的变化、立即触发

    • change:用于监听input、textarea、select等元素中内容的变化、失去焦点后触发

    • click:点击事件

    • dblclick:双击事件

    3.监听事件的注册方式

    • 在HTML中添加事件
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>index</title>
        <style>
            .red {
                color: red;
            }
    
            .yellow {
                color: yellow;
            }
        </style>
        <script>
            let btn = document.getElementById("btn");
            function cilcked() {
                console.log(1);
            }
    
        </script>
    </head>
    
    <body>
        <button id="btn" onclick="cilcked()">点击</button>
    </body>
    
    </html>
    • DOM元素中的监听事件
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>index</title>
        <script>
            window.onload = function () {
                let btn = document.getElementById("btn");
                btn.onclick = function () {
                    console.log(1);
                };
            }
        </script>
    </head>
    
    <body>
        <button id="btn">点击</button>
    </body>
    
    </html>
    • 使用addEventListener()方法——重点,一般使用这个
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>index</title>
        <script>
            window.onload = function () {
                let btn = document.getElementById("btn");
                btn.addEventListener("click", function () {
                    console.log(1);
                })
            }
        </script>
    </head>
    
    <body>
        <button id="btn">点击</button>
    </body>
    
    </html>

    十、JSON的用法

    • 对象转换成字符串:JSON.parse(对象);
    • 字符串转化为对象:JSON.stringify(字符串);

    十一、localStorage和sessionStorage

    • localStorage和sessionStorage的作用及区别

    作用:是 HTML5 提供的 Web Storage API,用于在浏览器端存储键值对数据。

    区别:

    localStoragesessionStorage
    数据持久性永久存储,除非手动清除仅在当前会话有效
    关闭浏览器后数据仍然保留数据被清除
    跨标签页共享同源的所有标签页共享仅限当前标签页
    存储方式存储字符串存储字符串

    十二 、BOM浏览器对象模型

    1.定义

    浏览器对象模型BOM(Browser Object Model),把“浏览器”当做一个“对象”来看待。

    • BOM的顶级对象是window
    • BOM学习的是浏览器窗口交互的一些对象
    • BOM没的标准,它是浏览器厂商在各自浏览器上定义的,兼容性较差

    2.常用的对象

    2.1window对象

    • 定义:浏览器的顶级对象,它是JS访问浏览器对象的一个接口,它是一个全局对象。定义在全局作用域中的变量、函数都会变成window对象的属性和方法, 我们在调用时可以省略window。
    • 常用的window对象:
      • 定时器
        • setInterval()——周期性定时器;clearnInterval()——清除定时器
          setTimeout(执行函数, 延迟时间, [arg1], [arg2], ...);
        • setTimeout()——延时执行定时器;clearnTimeout()——清除定时器
          setInterval(执行函数, 间隔时间, [arg1], [arg2], ...);

     2.2location对象

    • 定义:`location`对象表示当前页面的URL信息。例如,一个完整的URL我们可以location对象实现页面的跳转或者获取当前URL信息; URL:统一资源定位符,用于表示资源在网络上的地址,每个部分以`/`进行分隔。URL格式:协议://主机地址:端口【/工程名】/访问资源路径
    •  常用属性
      • location.href;    //设置或获取浏览器地址栏中的URL地址
      • location.protocol; // 协议
      • location.host; // 主机地址
      • location.port; // 端口
      • location.pathname; // 访问资源路径
      • location.search; // 参数

    2.3navigator对象

    • 定义:包含浏览器的信息
    • 属性
      • navigator.appName:浏览器名称;
      • navigator.appVersion:浏览器版本;
      • navigator.language:浏览器设置的语言;
      • navigator.platform:操作系统类型;
      • navigator.userAgent:浏览器设定的`User-Agent`字符串。

    2.4screen对象

    • 包含有关客户端显示屏幕的信息。
    • 属性
      • screen.width:屏幕宽度,以像素为单位;
      • screen.height:屏幕高度,以像素为单位;
      • screen.colorDepth:返回颜色位数,如8、16、24。
    2.5history(不建议使用 )
    • 定义:History 对象包含用户(在浏览器窗口中)访问过的 URL。History 对象最初设计来表示窗口的浏览历史。但出于隐私方面的原因,History 对象不再允许脚本访问已经访问过的实际 URL。唯一保持使用的功能只有 back()、forward() 和 go() 方法。

            

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值