3--JavaScript基础

1.概述

JavaScript,缩写为JS,是一种高级的、多范式、解释型的编程语言,是一门基于原型、函数先行的语言,它支持面向对象编程、命令式编程以及函数式编程,是目前web开发中不可缺少的脚本语言,不需要编译即可运行

JavaScript主要用来向HTML页面添加交互行为,可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离,具有跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows,Linux,Mac,Android等)

2.嵌入方法

2.1 嵌入式

理论上js可以写在任何地方,但是一般写在head标签或者body标签里

<script>
            alert("内嵌式");
</script>

2.2 外部式

建立一个外部js文件写入js语句,通过script标签对引入到HTML页面里

<script src="index.js"></script>

2.3 行内式

直接写在标签身上,是一个简写的事件,所有又称为事件属性

<input type="button" value="点击" onclick="alert('行内式')">
<button onclick="alert('行内式');">
            再次点击
</button>

3.语句要求

JavaScript 语句由值、运算符、表达式、关键词和注释构成

注释:

  单行注释:  //注释内容

  多行注释:  /*注释内容*/

变量:用于存储信息的容器,定义变量用var关键字

var a="lxl";

在JavaScript中,单双引号没有区别

4.保留关键字

保留关键字不可以用作变量、标签或者函数名,有些保留关键字是作为 JavaScript 以后扩展来使用

5.数据类型

数值型:number(凡是数字都是数值型,不区分整数和小数)

字符串型:string(凡是引号中的内容都是字符串型)

对象类型:object(特殊取值null)

布尔型:boolean(true、false)

未定义型:undefined

判断类型:typeof(输出要判断的数据类型)

6.运算符

算数运算符:+   -   *   /   %   ++   --

字符串拼接使用“+”

比较运算符:>   <   >=   <=   !=   ==   ===   !==

逻辑运算符:&&   ||   !

赋值运算符:=   +=   -=   *=   /=   %=   

7.条件控制语句

7.1 if语句

if(条件){
                函数体
            }

7.2 if...else语句

if(条件){
                函数体1
            }else{
                函数体2
            }

7.3 if...else if...else语句

if(条件1){
                函数体1
            }else if(条件2){
                函数体2
            }else if(条件n){
                函数体n
            }else{
                函数体
            }

7.4 switch...case语句

switch(表达式){
                case 1:
                    代码块1;
                    break;
                case n:
                    代码块n;
                    break;
                default:
                    代码块;
                    break;
            }

7.5 三元表达式

表达式1?表达式2:表达式3

当表达式1成立时,执行表达式2,否则执行表达式3

var max = 2>1? "true" : "false";
            console.log(max);

8.循环语句

8.1 for循环

for(初始变量;条件;迭代变量){
                循环体
            }

嵌套循环:双重for循环

内外变量名不能重复,外层循环不能使用内层循环的变量

使用嵌套循环打印九九乘法表:

for (var i = 1; i <= 9; i++) {
            //外层循环控制行数
            for (var j = 1; j <= i; j++) {
                //内层循环控制每一行的个数
                str += j + '×' + i + '=' + i * j + '\t';
            }
            str += '\n';
        }
        console.log(str);

8.2 while循环

while(循环成立条件){
                循环体
            }

先判断条件,当条件成立时,再执行循环体

8.3 do...while循环

do{
                循环体
            }
            while(循环成立条件)

先执行一次循环体,再判断条件,当条件成立时,继续执行循环体

8.4 结束循环

continue : 跳出当前循环,继续下个循环

break : 退出,结束整个循环

9.数组

概念:指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素

本质:数组是程序在内存中申请的N块连续的空间,可以用来保存一组数据

9.1 创建数组

<script>
        // 1.new Array();
        // 创建一个空的数组
        let arr = new Array();
        console.log(arr);

        //2.new Array(长度) 
        // 创建一个有长度的空数组
        let arr2 = new Array(5);
        console.log(arr2);

        // 3.new Array(数据1,数据2,数据3...);
        let arr3 = new Array('张三', 20, '男');
        console.log(arr3);

        // 4.利用字面量
        // 创建一个空的数组
        let arr4 = [];
        console.log(arr4);

        // 5.利用字面量[数据];
        //创建一个有长度的空数组
        let arr5 = [10];
        console.log(arr5);

        //6.let arr = [数据1,数据2,数据3...];
        let arr6 = ['张三', 20, '男'];
        console.log(arr6);
</script>

9.2 数组的赋值

<script>
        // 在声明的同时赋值
        let arr1 = [1,2,3,4,5,6,7];
        console.log(arr1);

        //在声明完之后再赋值
        let arr2=[];
        arr2[0]='你';
        arr2[1]='是';
        arr2[2]='谁';
        console.log(arr2);

        // 获得数组中指定下标的元素
        console.log(arr2[1]);
</script>

9.3 数组的操作

<script>
        // 数组的三要素:元素,下标,长度

        // 获得数组的长度
        let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
        console.log(arr.length);

        // 改变数组的长度
        arr.length = 20; //数组的长度可以变大,添加空元素
        console.log(arr);

        arr.length = 5;//数组的长度可以变小,数据会被删除(不可逆)
        console.log(arr); 
</script>

push方法:

<script>
        let arr4=[1,2,3,4];
        for(let i=0;i<100;i++){
            // 利用push方法,在数组的最后添加元素
            arr4.push(i+1);
        }
        console.log(arr4);
</script>

10.函数

概念:指封装了一段可被重复调用执行的代码块,通过此代码块可以实现大量代码的重复使用

function 函数名([参数1, 参数2,……]){
    语句
    [return 返回值]
}

参数说明:

  函数名:必选,用于指定函数名。在同一个页面中,函数名必须是唯一的,并且区分大小写

  参数:可选,用于指定参数列表。当使用多个参数时,参数间使用逗号进行分隔。一个函数最多可以有255个参数

  语句:必选,是函数体,用于实现函数功能的语句

  返回值:可选,用于返回函数值。返回值可以是任意的表达式、变量或常量

<script>
    function account(price, number) { // 定义有两个参数的函数
        let sum = price * number; // 计算金额
        return sum; //返回计算后的金额
    }
</script>

调用函数:

函数名(传递给函数的参数1, 传递给函数的参数2, ……);

eval() 函数:

  将字符串当做一段JavaScript代码解释并执行

11.变量的作用域

变量的作用域是指变量在程序中的有效范围,在该范围内可以使用该变量

<script>
    let a = "这是全局变量"; // 该变量在函数外声明,作用于整个脚本
    function func() { //定义函数
        let b = "这是局部变量"; //该变量在函数内声明,只作用于该函数体
        document.write(a + "<br>");//输出全局变量的值
        document.write(b);//输出局部变量的值
    }
    func();//调用函数
</script>

12.字典

字典是一种以键-值为一队存储的数据结构:key-value

在JavaScript中字典的基础是Array类,所以Array在JavaScript中既是数组也是字典

key相当于这个value在字典中的索引,所以key不允许重复,查找也会非常快(类似于哈希表)

12.1 定义字典

 var dic = new Array(); //定义一个字典
 // 添加字典的元素(key:value)
dic['a'] = '1';      
dic['b'] = '2';
dic['c'] = '3';
//也可以直接定义
dic={'a':1,'b':2,'c':3}

12.2 遍历字典

for (key in dic){
    console.log(key+":"+dic[key]);
}
//为指定元素赋值
dict['d']=10

12.3 删除字典

//方法一
delete dic["one"];
 
//方法二
delete dic.one;

13.JSON格式

 JSON源自于JavaScript,是一种轻量级(Light-Meight)、基于文本的(Text-Based)、可读的(Human-Readable)格式

说明如下:

  JSON是独立于任何编程语言的数据格式

  是一种用于存储和传输数据的轻量级格式

  语法是自描述的,便于人类阅读和理解

序列化:将对象序列转化成json字符串

使用toJSONString//方法一
var last=obj.toJSONString();

使用stringify//方法二
var last=JSON.stringify(obj);

反序列化:将json字符串转化为对象序列

JSON.parse(str, reviver)

  str:要解析的 JSON字符串

  reviver:可选的函数 function(key,value)

14.原型对象

14.1 原型的概念

原型是继承中的基础,JavaScript的继承就是基于原型的继承

JavaScript原型是指为其他对象提供共享属性访问的对象,在创建对象时,每个对象都包含一个隐式引用指向它的原型对象或者null

原型对象也是对象,这个对象也有自己的原型对象,称为原型对象的原型对象。这样就构成一个原型链

14.2 函数的原型对象

在创建函数的同时,浏览器会在内存中创建一个对象。这个函数中默认有一个prototype属性,指向了该对象,就是函数的原型对象,简称函数的原型

每个构造函数都有一个原型对象存在,这个原型对象通过构造函数的prototype属性来访问,原型对象默认会有一个constructor属性指向构造函数

14.3 原型的相关属性

prototype属性:

  prototype属性是函数所独有的,存在于构造函数中,它是从一个函数指向一个对象

  它的含义是函数的原型对象,也就是这个函数所创建的实例的原型对象

  它的作用是包含可以由特定类型的所有实例共享的属性和方法

constructor属性:

  constructor属性是对象所拥有的,它是从一个对象指向一个函数

__proto__ 属性:

  __proto__属性是对象所独有的,它是从一个对象指向一个对象,也即指向它们的原型对象

  它的作用是当访问一个对象的属性时,如果该对象内部不存在这个对象,那么就会去它的__proto__属性所指向的那个对象(即父对象)里面找,如果父对象也不存在这个属性,则继续往父对象的__proto__属性所指向的那个对象里面找,如果还没找到,就继续往上找,直到原型链顶端null

hasOwnProperty() 方法:

  它的作用是判断函数的原型所在位置。一个对象本身添加的属性返回true,在原型中的属性和不存在的属性都会返回false

//创建构造函数
 
function Person(){}
 
//使用Person.prototype直接访问到原型对象
 
// 给Person函数的原型对象中添加一个属性name,值是"小明"
 
// Person.prototype.name = "小明";
 
Person.prototype = {
 
    constructor:Person,   //让constructor重新指向Person函数
 
    /*如果直接给Person的原型指定对象字面量(没有上面这一行),
 
      这个对象的constructor属性不再指向Person函数*/
 
    name: "小明"
 
};
 
//创建一个实例对象p1
 
var p1 = new Person();
 
//访问p1对象的属性name
 
p1.age = 18;
 
console.log(Person.prototype.constructor === Person);
 
//输出结果是:true
 
//如果在Person.prototype中没有constructor:Person这一行代码则输出flase
 
//Person.prototype.name = "小明";这种写法输出也是true
 
console.log(p1.__proto__ === Person.prototype);
 
//输出结果是:true
 
//如果在Person.prototype中没有constructor:Person这一行代码则输出flase
 
//Person.prototype.name = "小明";这种写法输出也是true
 
console.log(p1.name);
 
//输出结果是:小明  
 
/*虽然在p1对象中没有明确的添加属性name,但是仍然可以成功打印的原因是:
 
  p1的__proto__属性指向的原型中有name属性,所以可以访问到属性name值。*/
 
console.log(p1.hasOwnProperty("age"));
 
//输出结果是:true
 
//因为age属性是直接在p1属性中添加的
 
console.log(p1.hasOwnProperty("name"));
 
//输出结果是:false
 
//因为name属性是在原型中添加的
 
console.log(p1.hasOwnProperty("sex"));
 
//输出结果是:false
 
//因为sex属性不存在

15.DOM操作

DOM(Document Object Model)文档对象模型,是针对HTML和XML的一个API(应用程序接口),通过这些接口可以改变网页的内容、结构和样式

DOM描述了一个具有层次化特点的节点树,允许开发人员增删改查页面的某些部分

文档:一个页面就是一个文档,DOM 中使用 document 表示

元素:页面中的所有标签都是元素,DOM中使用 element 表示

节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node 表示

15.1 获取元素

通过元素 ID 获取 getElementById()

// 获取 id 为 time 的第一个元素
var timer = document.getElementById('time');
// 返回获取到的整个元素标签
console.log(timer);
// 返回获取到的元素类型
console.log(typeof timer);
// 在控制台中显示指定 JavaScript 对象的属性,并通过类似文件树样式的交互列表显示, 更好的查看属性和方法
console.dir(timer);

通过标签名获取 getElementByTagName()

// 获取页面中所有 li
var lis = document.getElementsByTagName('li');
// 输出伪数组
console.log(lis);
// 输出伪数组中的第2个对象
console.log(lis[1]);
// 遍历
for (i = 0; i < lis.length; i++){
    console.log(lis[i]);
}

通过类名获取 getElementByClassName()

var box = document.getElementsByClassName('box');
console.log(box);

通过选择器获取 querySelector()

var box = document.querySelector('.box');
console.log(box);

通过选择器获取 querySelectorAll()

var box =  document.querySelectorAll('.box');
console.log(box);

获取 body 和 html

// 获取body
var body = document.body;
console.log(body);
console.dir(body);
// 获取整个html
var htmlEle = document.documentElement;
console.log(htmlEle);

15.2 事件操作

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

事件由三部分组成:事件源、事件类型、事件处理程序

  事件源:事件的触发对象

  事件类型:事件如何被触发,比如鼠标点击(onclick)

  事件处理程序:事件被触发要执行的操作

注册事件:

传统注册方式

// 获取按钮元素
var btn = document.querySelector('button');
// 给按钮元素添加点击事件
btn.onclick = function(){
    // 事件处理程序,但被点击时执行
    console.log('按钮被点击');
}

addEventListener 监听注册方式

// 给元素btn添加两个监听鼠标点击事件
btn.addEvenListener('click',function(){
    alert(22);
})
btn.addEvenListener('click',function(){
    alert(33);
})

attachEvent 监听注册方式

btn.attachEvent('onclick', function(){
    alert(11)
})

15.3 操作元素

JavaScript 的 DOM 操作可以改变网页内容、结构和样式,利用 DOM 操作元素来改变元素里面的内容、属性等

改变元素内容:

innerText

var div = document.querySelector('div');
div.innerText = 'brokyz'

innerHTML

var div = document.querySelector('div');
div.innerHTML = '<strong>brokyz</strong>'

修改或添加属性内容:

// 获取a标签
var a = document.querySelector('a');
// 更改或添加a的属性
a.href = 'https://bilibili.com';
a.id = 'bilibili';
// 修改类名属性值
a.className = 'iama';

修改或添加CSS样式属性:

var div = document.querySelector('div');
this.style.backgroundColor = 'antiquewhite';
this.style.width = '400px';

对自定义属性值的操作:

获取自定义属性值 getAttribute()

var div = document.querySelector('div');
// 获取内置属性值
console.log(div.getAttribute('id'));
// 获取自定义属性值
console.log(div.getAttribute('index'));

添加和修改自定义属性值 setAttribute('自定义属性','要修改的值')

var div = document.querySelector('div');
div.setAttribute('index','2');
div.setAttribute('class','box');

移除自定义属性值 removeAttribute()

div.removeAttribute('index');

15.4 总结

关于 DOM 操作,主要是针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作

创建:document.write、innerHTML、createElement

增:appendChild、insertBefore

删:removeChild

改:主要修改 DOM 元素的属性、内容、表单值等

  修改元素属性:src、href、title

  修改普通元素内容:innerHTML、innerText

  修改表单元素:value、type、disable

  修改元素样式:style、className

查:主要获取查询 DOM 元素

  DOM 提供的 API 方法:getElementById、getElementByTagName 古老用法,不推荐

  H5 提供的新方法:querySelector、querySelectorAll 推荐

  利用节点操作获取元素:父(parentNode)、子(children)、兄(previousElementSibling、nextElementSibling)推荐

属性操作:主要针对于自定义属性

  setAttribute:设置dom的属性值

  getAttribute:得到dom的属性值

  removeAttribute:移除属性

事件操作:给元素注册事件,采取事件源.事件类型 = 事件处理程序

  onclick:鼠标点击左键触发

  onmouseover:鼠标经过触发

  onmouseout:鼠标离开触发

  onfocus:获得鼠标焦点触发

  onblur:失去鼠标焦点触发

  onmousemove:鼠标移动触发

  onmouseup:鼠标弹起触发

  onmousedown:鼠标按下触发

posted @ 2023-07-16 20:09  lxl3344  阅读(75)  评论(0编辑  收藏  举报