JavaScript

1 JavaScript 是什么?

  • JavaScript 是世界上最流行的语言之一,是一种运行在客户端的脚本语言 (Script 是脚本的意思)

  • 脚本语言:不需要编译,运行过程中由 js 解释器( js 引擎)逐行来进行解释并执行

  • 现在也可以基于 Node.js 技术进行服务器端编程

JavaScript的作用

  • 表单动态校验(密码强度检测) ( JS 产生最初的目的 )
  • 网页特效
  • 服务端开发(Node.js)
  • 桌面程序(Electron)
  • App(Cordova)
  • 控制硬件-物联网(Ruff)
  • 游戏开发(cocos2d-js)

浏览器执行 JS 简介

浏览器分成两部分:渲染引擎和 JS 引擎

浏览器本身并不会执行JS代码,而是通过内置 JavaScript 引擎(解释器) 来执行 JS 代码 。JS 引擎执行代码时逐行解释每一句源码(转换为机器语言),然后由计算机去执行,所以 JavaScript 语言归为脚本语言,会逐行解释执行

 JS 的组成

1.ECMAScript

​ ECMAScript 是由ECMA 国际( 原欧洲计算机制造商协会)进行标准化的一门编程语言,这种语言在万维网上应用广泛,它往往被称为 JavaScript或 JScript,但实际上后两者是 ECMAScript 语言的实现和扩展。

ECMAScript:规定了JS的编程语法和基础核心知识,是所有浏览器厂商共同遵守的一套JS语法工业标准。

更多参看MDN: MDN手册icon-default.png?t=M0H8https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/JavaScript_technologies_overview

 

2.DOM——文档对象模型

​ 文档对象模型(DocumentObject Model,简称DOM),是W3C组织推荐的处理可扩展标记语言的标准编程接口。通过 DOM 提供的接口可以对页面上的各种元素进行操作(大小、位置、颜色等)

3.BOM——浏览器对象模型

​ 浏览器对象模型(Browser Object Model,简称BOM) 是指浏览器对象模型,它提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。通过BOM可以操作浏览器窗口,比如弹出框、控制浏览器跳转、获取分辨率等。

3.6 JavaScript的特点

​ JavaScript是基于对象和事件驱动的解释性的脚本语言,适用于静态或动态页面,是一种广泛使用的客户端脚本语言,它具有解释性、基于对象、事件驱动、安全性和跨平台等特点。

1. 解释性

JavaScript 不同于一些编译性的程序语言,例如 C、C++ 等,他是一种解释性的程序语言,它的源代码不需要经过编译,而直接在浏览器种运行时被解析。

2. 基于对象

JavaScript 是一种基于对象的语言,这意味着它能运用自己已经创建的对象,因此,许多功能可以来自脚本环境中对象的方法与脚本的相互作用。

3. 事件驱动

JavaScript 可以直接对用户或者客户输入做出响应,无须经过 web 服务器,它对用户的响应,以事件驱动的方式进行。

4. 跨平台

JavaScript依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持 JavaScript 的浏览器就可正常执行。

3.7 JS 初体验

JS 有3种书写位置,分别为行内、内嵌和外部。
  1. 行内式

    <input type="button" value="点我试试" onclick="alert('Hello World')" />
    
    • 可以将单行或少量 JS 代码写在HTML标签的事件属性中(以 on 开头的属性),如:onclick
    • 注意单双引号的使用:在HTML中我们推荐使用双引号, JS 中我们推荐使用单引号
    • 可读性差, 在html中编写JS大量代码时,不方便阅读;
    • 引号易错,引号多层嵌套匹配时,非常容易弄混;
    • 特殊情况下使用
  2. 内嵌式

    <script>
        alert('Hello  World~!');
    </script>
    
    • 可以将多行JS代码写到 script 标签中
    • 内嵌 JS 是学习时常用的方式
  3. 外部JS文件

    <script src="my.js"></script>
    
    • 利于HTML页面代码结构化,把大段 JS代码独立到 HTML 页面之外,既美观,也方便文件级别的复用
    • 引用外部 JS文件的 script 标签中间不可以写代码
    • 适合于JS 代码量比较大的情况

 JavaScript注释

单行注释

为了提高代码的可读性,JS与CSS一样,也提供了注释功能。
JS中的注释主要有两种,分别是 单行注释 和 多行注释。

单行注释的注释方式如下:

// 我是一行文字,不想被 JS引擎 执行,所以 注释起来	
// 用来注释单行文字(  快捷键   ctrl  +  /   )

多行注释:

多行注释的注释方式如下:

/*
  获取用户年龄和姓名
  并通过提示框显示出来
*/
/* */  用来注释多行文字( 默认快捷键  alt +  shift  + a ) 

快捷键修改为: ctrl + command + /

vscode → 首选项按钮 → 键盘快捷方式 → 查找 原来的快捷键 → 修改为新的快捷键 → 回车确认

JavaScript输入输出语句

为了方便信息的输入输出,JS中提供了一些输入输出语句,其常用的语句如下:

方法说明归属
alert(msg)浏览器弹出警示框浏览器
console.log(msg)浏览器控制台打印输出信息浏览器
prompt(info)浏览器弹出输入框,用户可以输入浏览器
  • 注意:alert() 主要用来显示消息给用户,console.log() 用来给程序员自己看运行时的消息。

事件基础

 事件概述

​ JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。

简单理解: 触发— 响应机制

​ 网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个 事件,然后去执行某些操作。

事件三要素

交互效果可以遵循简单三步曲来实现:

  • 事件源(谁):触发事件的元素
  • 事件类型(什么事件): 例如 click 点击事件
  • 事件处理程序(做啥):事件触发后要执行的代码(函数形式),事件处理函数

 js获取标签

<div id="div1"></div>
<script>
  /*
 document:文档
 get:获取
 Element:元素
 By:通过
 Id:ID名
 */
 alert(document.getElementById("div1"));  //[object HTMLDivElement]
</script>

事件案例代码:

<body>
    <button id="btn">唐伯虎</button>
    <script>
        // 点击一个按钮,弹出对话框
        // 1. 事件是有三部分组成  事件源  事件类型  事件处理程序   我们也称为事件三要素
        //(1) 事件源 事件被触发的对象   谁  按钮
        var btn = document.getElementById('btn');
        //(2) 事件类型  如何触发 什么事件 比如鼠标点击(onclick) 还是鼠标经过 还是键盘按下
        //(3) 事件处理程序  通过一个函数赋值的方式 完成
        btn.onclick = function() {
            alert('点秋香');
        }
    </script>
</body>

执行事件的步骤

案例代码

<body>
    <div>123</div>
    <script>
        // 执行事件步骤
        // 点击div 控制台输出 我被选中了
        // 1. 获取事件源
        var div = document.querySelector('div');
        // 2.绑定事件 注册事件
        // div.onclick 
        // 3.添加事件处理程序 
        div.onclick = function() {
            console.log('我被选中了');
        }
    </script>
</body>

分析事件三要素

  • 下拉菜单三要素
  • 关闭广告三要素

添加事件

<div id="div1"></div>
<script>
/*
onclick:单击事件
*/
document.getElementById("div1").onclick = function () {
 // 存放 展示效果的代码块
}
</script>

点击按钮触发事件弹出 hello world

<button id="but">弹出</button>
<script>
/*
1. 找到谁 按钮 document.getElementById("but");
2. 加事件 ( 点击事件 ) 标签.onclick
3. 要做的事情 (function (){})
语法:标签.事件 = function(){要做的事情}
*/
document.getElementById("but").onclick = function () {
   alert("hello world");
}
 </script>

window.onload

window.onload的作用是,当文档和资源都加载完成后调用。

​ 当我们把script标签放在head里面去获取元素的时候,我们会发现获取到的值为null,那是因为代码是从上往下执行,当获取标签的时候,标签还没有被加载。

<head>
<script>
window.onload = function(){
   document.getElementById("but").onclick = function () {
	 alert("hello world");
  }
}
</script>
</head>
<button id="but">按钮</button>

其他事件

​ js 的事件有很多,如鼠标事件,键盘事件,文本事件,窗口事件等等,这些后期会讲,我们这里先掌握简单的鼠标事件。

鼠标事件除了点击onclick之外,还有很多其他的鼠标事件,具体如下:

  • onclick :点击事件
  • ondblclick :双击事件
  • onmouseover : 鼠标移入元素
  • onmouseout : 鼠标离开元素
  • onmouseenter :鼠标移入元素
  • onmouseleave :鼠标离开元素
  • onmousemove: 鼠标在元素中移动
  • onmousedown: 鼠标按下
  • onmouseup: 鼠标抬起
  • oncontextmenu :鼠标右键菜单事件
<script>
    // 1.onclick :点击事件
    document.getElementById("box").onclick = function(){
        console.log("点击了");
    }
    // 2.onmouseover :鼠标移入元素
    document.getElementById("box").onmouseover = function(){
        console.log("鼠标移入元素");
    }
    // ......
</script>
<div id="box">我是box</div>

变量的概念

什么是变量

白话:变量就是一个装东西的盒子。

通俗:变量是用于存放数据的容器。 我们通过 变量名 获取数据,甚至数据可以修改。

变量在内存中的存储:

本质:变量是程序在内存中申请的一块用来存放数据的空间。类似我们酒店的房间,一个房间就可以看做是一个变量。
变量的使用:

  • 变量的声明
  • 变量的赋值

 声明变量

//  声明变量  
var age; //  声明一个 名称为age 的变量     
  • var 是一个 JS关键字,用来声明变量( variable 变量的意思 )。使用该关键字声明变量后,计算机会自动为变量分配内存空间,不需要程序员管

  • age 是程序员定义的变量名,我们要通过变量名来访问内存中分配的空间

赋值

age = 10; // 给 age  这个变量赋值为 10        
  • = 用来把右边的值赋给左边的变量空间中 此处代表赋值的意思
  • 变量值是程序员保存到变量空间里的值

 变量的初始化

var age  = 18;  // 声明变量同时赋值为 18
// 声明一个变量并赋值, 我们称之为变量的初始化。

 变量语法扩展

  • 更新变量

​ 一个变量被重新复赋值后,它原有的值就会被覆盖,变量值将以最后一次赋的值为准。

var age = 18;
age = 81;   // 最后的结果就是81因为18 被覆盖掉了  
  • 同时声明多个变量

    ​ 同时声明多个变量时,只需要写一个 var, 多个变量名之间使用英文逗号隔开。

var age = 10,  name = 'zs', sex = 2;       
  • 声明变量特殊情况

    情况说明结果
    var age ; console.log (age);只声明 不赋值undefined
    console.log(age)不声明 不赋值 直接使用报错
    age = 10; console.log (age);不声明 只赋值10

 变量命名规范

规则:

  • 由字母(A-Za-z)、数字(0-9)、下划线(_)、美元符号( $ )组成,如:usrAge, num01, _name
  • 严格区分大小写。var app; 和 var App; 是两个变量
  • 不能 以数字开头。 18age 是错误的
  • 不能 是关键字、保留字。例如:var、for、while
  • 变量名必须有意义。 MMD BBD nl → age
  • 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。myFirstName![](/Users/mac/Desktop/one/第一章 JavaScript初识/笔记/图片15.png)

推荐翻译网站: 有道 爱词霸

操作元素

​ JavaScript的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容、属性等。(注意:这些操作都是通过元素对象的属性实现的)

改变元素内容(获取或设置)

innerText改变元素内容

<body>
    <button>显示当前系统时间</button>
    <div>某个时间</div>
    <p>1123</p>
    <script>
        // 当我们点击了按钮,  div里面的文字会发生变化
        // 1. 获取元素 
        var btn = document.querySelector('button');
        var div = document.querySelector('div');
        // 2.注册事件
        btn.onclick = function() {
            // div.innerText = '2019-6-6';
            div.innerHTML = getDate();
        }
        function getDate() {
            var date = new Date();
            // 我们写一个 2019年 5月 1日 星期三
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var dates = date.getDate();
            var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
            var day = date.getDay();
            return '今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day];
        }
    </script>
</body>

innerText和innerHTML的区别

  • 获取内容时的区别:

​ innerText会去除空格和换行,而innerHTML会保留空格和换行

  • 设置内容时的区别:

​ innerText不会识别html,而innerHTML会识别

案例代码

<body>
    <div></div>
    <p>
        我是文字
        <span>123</span>
    </p>
    <script>
        // innerText 和 innerHTML的区别 
        // 1. innerText 不识别html标签 非标准  去除空格和换行
        var div = document.querySelector('div');
        // div.innerText = '<strong>今天是:</strong> 2019';
        // 2. innerHTML 识别html标签 W3C标准 保留空格和换行的
        div.innerHTML = '<strong>今天是:</strong> 2019';
        // 这两个属性是可读写的  可以获取元素里面的内容
        var p = document.querySelector('p');
        console.log(p.innerText);
        console.log(p.innerHTML);
    </script>
</body>

 常用元素的属性操作

获取属性的值

元素对象.属性名

设置属性的值

元素对象.属性名 = 值

案例代码

<body>
    <button id="ldh">刘德华</button>
    <button id="zxy">张学友</button> <br>
    <img src="images/ldh.jpg" alt="" title="刘德华">
    <script>
        // 修改元素属性  src
        // 1. 获取元素
        var ldh = document.getElementById('ldh');
        var zxy = document.getElementById('zxy');
        var img = document.querySelector('img');
        // 2. 注册事件  处理程序
        zxy.onclick = function() {
            img.src = 'images/zxy.jpg';
            img.title = '张学友思密达';
        }
        ldh.onclick = function() {
            img.src = 'images/ldh.jpg';
            img.title = '刘德华';
        }
    </script>
</body>

表单元素的属性操作

获取属性的值

元素对象.属性名

设置属性的值

元素对象.属性名 = 值

表单元素中有一些属性如:disabled、checked、selected,元素对象的这些属性的值是布尔型。

案例代码

<body>
    <button>按钮</button>
    <input type="text" value="输入内容">
    <script>
        // 1. 获取元素
        var btn = document.querySelector('button');
        var input = document.querySelector('input');
        // 2. 注册事件 处理程序
        btn.onclick = function() {
            // 表单里面的值 文字内容是通过 value 来修改的
            input.value = '被点击了';
            // 如果想要某个表单被禁用 不能再点击 disabled  我们想要这个按钮 button禁用
            // btn.disabled = true;
            this.disabled = true;
            // this 指向的是事件函数的调用者 btn
        }
    </script>
</body>

点操作符和中括号操作符使用

  • 是某一个具体的属性值是,用点操作符。
  • 当是某一个变量时,用中括号操作符,中括号里面放这个变量。
<div id="box" title="123">456</div>
<script>
var oDiv = document.getElementById(box");
// 1.获取title属性值
var t= oDiv["title"];
console.log(t);

// 2.设置title属性
oDiv["title"] = "web全栈";

// 3.中括号操作符的正确使用场景
var tit = ‘title’;
console.log(oDiv[tit]); // 当是变量时,就只能使用中括号操作符,不能使用点操作符
</script>

注意:当把属性名赋值给一个变量的时候,就可以通过使用中括号 []来操作变量,就可以操作这个属性

样式属性操作

元素样式是写在 style 标签或 style 属性中,用来设置元素的外观的。

我们可以通过 JS 修改元素的大小、颜色、位置等样式。

js操作的样式全部属于行内样式

常用方式

方式1:通过操作style属性

语法:

  • 获取元素样式属性:元素.style.样式
  • 设置元素样式属性:元素.style.样式名 = “样式值”
    <body>
        <div></div>
        <script>
            // 1. 获取元素
            var div = document.querySelector('div');
            // 2. 注册事件 处理程序
            div.onclick = function() {
                // div.style里面的属性 采取驼峰命名法 
                div.style.backgroundColor = 'purple';
                div.style.width = '250px';
            }
        </script>
    </body>

    方式2:通过操作className属性

    元素对象.className = 值;

    因为class是关键字,所有使用className。

  • 案例代码

    <body>
        <div class="first">文本</div>
        <script>
            // 1. 使用 element.style 获得修改元素样式  如果样式比较少 或者 功能简单的情况下使用
            var test = document.querySelector('div');
            test.onclick = function() {
                // this.style.backgroundColor = 'purple';
                // this.style.color = '#fff';
                // this.style.fontSize = '25px';
                // this.style.marginTop = '100px';
    
                // 2. 我们可以通过 修改元素的className更改元素的样式 适合于样式较多或者功能复杂的情况
                // 3. 如果想要保留原先的类名,我们可以这么做 多类名选择器
                // this.className = 'change';
                this.className = 'first change';
            }
        </script>
    </body>

    cssText

  • cssText 本质是什么?

    cssText 的本质就是设置 HTML 元素的 style 属性值。

  •  cssText 怎么用?

  • document.getElementById("d1").style.cssText = "color:red; font-size:13px;";

    cssText 返回值是什么?

    在某些浏览器中(比如 Chrome),你给他赋什么值,它就返回什么值。在 IE 中则比较痛苦,它会格式化输出、会把属性大写、会改变属性顺序、会去掉最后一个分号,比如:

    document.getElementById("d1").style.cssText = "color:red; font-size:13px;";
    alert(document.getElementById("d1").style.cssText);
    

    在 IE 中值为:FONT-SIZE: 13px; COLOR: red

  • cssText的使用优势

  • 一般情况下我们用js设置元素对象的样式会使用这样的形式:

    var element= document.getElementById(“id”); element.style.width=”20px”; element.style.height=”20px”; element.style.border=”solid 1px red”;

    样式一多,代码就很多;而且通过JS来覆写对象的样式是比较典型的一种销毁原样式并重建的过程,这种销毁和重建,都会增加浏览器的开销。

  •  cssText问题

语法为:

obj.style.cssText=”样式”;

element.style.cssText=”width:20px;height:20px;border:solid 1px red;”;

这样就可以尽量避免页面reflow,提高页面性能。

但是,这样会有一个问题,会把原有的cssText清掉,比如原来的style中有’display:none;’,那么执行完上面的JS后,display就被删掉了。

cssText累加的方法

Element.style.cssText += ‘width:100px;height:100px;top:100px;left:100px;’

 IE中解决兼容问题

上面cssText累加的方法在IE中是无效的。

可以在前面添加一个分号来解决这个问题

Element.style.cssText += ‘;width:100px;height:100px;top:100px;left:100px;’

 

内嵌样式不会被覆盖掉

如果前面有样式表文件写着 div { text-decoration:underline; },这个会被覆盖吗?

不会!因为它不是直接作用于 HTML 元素的 style 属性。

<style>
#outer{width:500px;margin:0 auto;padding:0;text-align:center;}
#div1{width:100px;height:100px;background:black;margin:10px auto;display:block;}
</style>
<script>
var changeStyle = function (elem, attr, value)
{
    elem.style[attr] = value
};
window.onload = function ()
{
    var oBtn = document.getElementsByTagName("input");
    var oDiv = document.getElementById("div1");
    var oAtt = ["width","height","background","display","display"];
    var oVal = ["200px","200px","red","none","block"];
 
    for (var i = 0; i < oBtn.length; i++)
    {
        oBtn[i].index = i;
        oBtn[i].onclick = function ()
        {
            this.index == oBtn.length - 1 && (oDiv.style.cssText = "");
            changeStyle(oDiv, oAtt[this.index], oVal[this.index])
        }  
    }
};
</script>
</head>
<body>
<div id="outer">
<input type="button" value="变宽" />
<input type="button" value="变高" />
<input type="button" value="变色" />
<input type="button" value="隐藏" />
<input type="button" value="重置" />
<div id="div1"></div>
</div>  
</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值