Web开发基础之JavaScript

  JavaScript是什么

  JavaScript是一种运行在客户端(浏览器) 的编程语言,用来给网页添加动态功能。

  JavaScript的历史

  http://www.w3school.com.cn/js/pro_js_history.asp

  JavaScript的作用

  一,最初目的

  为了处理表单的验证操作

  二,现在广泛的应用场景

 

  1. 网页特效

 

  2. 服务端开发(Node.js)

 

  3. 命令行工具(Node.js)

 

  4. 桌面程序(Electron)

 

  5. App(Cordova)

 

  6. 游戏开发

  JavaScript和HTML CSS的区别

  HTML:提供网页的结构和内容

  CSS:修饰和美化内容

  JavaScript:控制页面内容,增加页面动态效果

  JavaScript的组成

  

 

 

  ECMAScript - JavaScript的核心

  ECMAScript 是 JavaScript 的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关(就是 JavaScript 的语法规范)

  BOM - 浏览器对象模型

  一套操作浏览器功能的 API

  通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等

  DOM - 文档对象模型

  一套操作页面元素的 API

  DOM 可以把 HTML看做是文档树,通过 DOM 提供的 API 可以对树上的节点进行操作

  JavaScript的书写位置

  JavaScript书写位置和CSS类似(行内样式、嵌入样式、外部样式)

  写在行内

<input type="button" value="按钮" onclick="alert('Hello World')" />

  写在script标签内

<head>
  <script>
    alert('Hello World!');
  </script>
</head>

  写在外部js文件中,在页面中引入使用

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

  注意

  引入外部js文件的script标签中,不可以写javaScript代码在</body>之前

  css在头部引入,js文件在底部引入

  示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js的书写位置</title>
</head>
<body>
    <!-- js的行内写法 -->
    <button onclick="alert('点到我了')">别点我</button>
    <button id="btn">就点你</button>
    <script>
        // 内部js写法
        document.getElementById('btn').onclick=function(){
            alert("就点你")
        }
    </script>
</body>
</html>

  JavaScript的基本语法

  1,变量

  1.1变量的定义

  在js中使用var关键字定义变量

  变量的语法

var age = 18;
var userName = 'linux'; 

  同时声明多个变量

var age, name, sex;
age = 18;
name = 'centos'

  同时声明多个变量并赋值

var age = 23, name = 'shell';
  1.2变量的命名规则和规范

  规则 - 必须遵守的,不遵守会报错

  - 由字母、数字、下划线、$符号组成,不能以数字开头

  - 不能是关键字和保留字,例如:for、while。

  - 区分大小写

  规范 - 建议遵守的,不遵守不会报错

  - 变量名必须有意义

  - 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。例如:userName、userPassword

  2,数据类型

  常用的数据类型为:Number、String、Boolean

  2.1 Number类型

  100 183.5

  2.2String类型

  字符串是用引号括起来的一段内容

  ‘linux’’centos’ ‘sa’ ‘devops’

  javaScript中的字符串,单双引号都可以使用,推荐使用单引号

  转义字符

 

 

   字符串长度

  length属性可以用来获取字符串的长度

var str = “我是一个运维人员”
console.log(str.length);

  字符串的拼接

  字符串可以通过+拼接

console.log(‘linux’+’centos’);

  boolean类型

  字面量:true和false

  数据类型总结示例

#4_变量和数据类型.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    
    <title>Document</title>
</head>
<body>
    <script>
        // 声明变量并赋值
        // 字符串
        var name = 'devops';
        // 数字
        var age = 18;
        // 布尔
        var sex = true;
        // 打印对应变量的类型
        console.log(typeof(name), typeof(age), typeof(sex))
        // string number boolean
        // 打印对应变量的值
        console.log(name, age, sex)
        // devops 18 true
        // 打印字符串长度
        console.log(name.length)
        // 6
        // 字符串拼接
        console.log(name + 'linux')
        // devopslinux
    </script>
</body>
</html>

  打开页面按F12进入调试模式可以看到console.log的输出结果

 

 

   3,注释

  单行注释

// 这是一个变量
var name = 'linux'

  多行注释

/*
注释内容
*/

  4,运算符

  运算符(operator),非常类似于数学中的运算符

+  加
-   减
*   乘
/   除
% 取余 

  示例

  <script>
            var a = 100;
            var b = 50;
            console.log(a+b)
            console.log(a-b)
            console.log(a/b)
            console.log(a*b)
            console.log(a%b)
        </script>

  自增自减运算符

  前置++和后置++的区别

<script>     
// 自增自减运算符
            // 先输出再执行+1
            console.log(a++) 
            // 100
            console.log(a)
            // 101
            // 先执行+1再执行打印
            console.log(++b)
            // 51    
</script>

  逻辑运算符

&& 与  两个操作数同时为true,结果为true,否则都是false   一损俱损
|| 或  两个操作数有一个为true,结果为true,否则为false
!  非  取反

  

<script>       
 // 逻辑运算符
            console.log(true)
            console.log(false)
            console.log(true && true)
            console.log(false || false)
            console.log(!false)        
</script>

  比较运算符

<  >  >=  <=  == != === !==

  ==与===的区别:

  ==只进行值得比较===类型和值同时相等,则相等

  示例

console.log(1===1)  // true
console.log('1'==1) // 比较值 字符串和数字对比 true
console.log('1'===1) // false 比较值和数据类型 都匹配才为true

  赋值运算符

=   +=   -=   *=   /=   %=

  先运算,再赋值

  分支结构

  分支语句,一般用来判断不同的多种情况,并在代码块中进行对应处理。

  if语句

  1,单分支语句(if)

if (/* 条件表达式 */) {
  // 执行语句
}

  示例

  <script>
        var age = 18;
        if(age >= 18){
            console.log('已经成年')
        } 
        else {
            console.log('未成年')
        }
    </script>

  双分支语句

  语法

if (/* 条件表达式 */){
  // 成立执行语句
} else {
  // 否则执行语句
}

  多分支语句

  语法

if (/* 条件1 */){
  // 成立执行语句
} else if (/* 条件2 */){
  // 成立执行语句
} else if (/* 条件3 */){
  // 成立执行语句
} else {
  // 最后默认执行语句
}

  switch语句

  语法

switch(n)
{
case 1:
  执行代码块 1
  break;
case 2:
  执行代码块 2
  break;
default:
  n 与 case 1 和 case 2 不同时执行的代码
}

  示例

   <script>
        // var age = 18;
        // if(age >= 18){
        //     console.log('已经成年')
        // } 
        // else {
        //     console.log('未成年')
        // }
        // 获取今天是星期几的数字 从1-7
        var day = new Date().getDay()
        // console.log(day)
        switch(day){
            case 1:
                console.log("今天是星期一")
                break;
            case 2:
                console.log("今天是星期二")
                break;
            case 3:
                console.log("今天是星期三")
                break;
            case 4:
                console.log("今天是星期四")
                break;
            case 5:
                console.log("今天是星期五")
                break;
            case 6:
                console.log("今天是星期六")
                break;
            default:
                console.log("今天是星期天")
        }
        
    </script>

  运行结果

 

 

   循环结构

  for循环

  语法

for (初始化表达式1; 判断表达式2; 自增表达式3) {
  // 循环体4
}

  示例

<body>
    <script>
        for(var i=1;i<10;i++){
            console.log('这是重复第'+i+'次')
        }
    </script>
 
</body>

  输出

 

 

   在页面查看循环过程

  浏览器为edge

  按F12打开调试模式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   以此类推一直执行到i的值为10退出循环

 

 

 

  while循环

// 当循环条件为true时,执行循环体,
// 当循环条件为false时,结束循环。
while (循环条件) {
  //循环体
}

  示例

  <script>
 
        // while循环
        i = 1
       while (i<10){
            console.log('这是重复第'+i+'次');
             i++;
         }
 
   </script>

  

  do...while循环

do {
  // 循环体;
} while (循环条件);

  示例

  <script>
        // do..wuile循环
        j = 1
        do {
            console.log('这是重复第'+j+'次');
            j++;
        } while (j<10)
    </script>

  注意: do...while和while使用上非常像,区别在于do...while不管条件是否成立,会执行一次操作。也就是先操作后判断。while是先判断再执行

    一般情况使用for最多

  continue和break关键字

  break:立即跳出整个循环,即循环结束,开始执行循环后面的内容(直接跳到大括号)

  continue:立即跳出当前循环,继续下一次循环(跳到i++的地方)

  数组

  数组是一个有序的列表,可以在数组中存放任意数据,并且数组的长度可以动态调整。

  数组的定义

  语法

//创建一个空数组
var arr = [];
//创建一个数字的数组
var arr1 = [1,2,3,4,5];
//创建包含字符串的数组
var arr2 = [‘linux’,’centos’,’redhat’];

  数组示例

 <script>
        // 定义数组
        var arr = []
        var arr1 = [1,2,3,4,5]
        var arr2 = ['centos','linux','redhat']
        // console.log(arr,arr1,arr2) 
        // length获取数组长度
        // console.log(arr1.length)
        // 遍历数组输出,默认下标从0开始
        for(var i = 0;i < arr1.length;i++){
            console.log(arr1[i]);
        }
        // 没有的元素输出为undefined
        console.log(arr2[3])
        // undefined
        // 把数组长度定义为0即清空数组
        // arr1.length = 0
        // console.log(arr1)
        
    </script>

  数组元素的操作

 

 

   示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组的操作方法</title>
</head>
<body>
    <script>
        var arr1 = [1,2,3]
        var arr2 = [4,5,6]
        // concat连接两个或者更多数组并返回结果
        console.log(arr1.concat(arr2))
        // [1, 2, 3, 4, 5, 6]
        // join把数组所有元素组成一个字符串,元素通过分隔符进行分割,默认分隔符为,
        console.log(arr1.join())
        // 1,2,3
        // 设置分隔符为:
        console.log(arr1.join(':'))
        // 1:2:3
        // pop删除并返回数组最后一个元素
        console.log(arr1.pop())
        // 3
        // 最后一个元素3删除了数组剩下两个元素
        console.log(arr1)
        // [1,2]
        // push向数组添加一个或者多个元素,返回数组长度
        console.log(arr1.push(3,4))
        // 4
        // 原数组是[1,2]添加了3,4两个元素
        console.log(arr1)
        // [1,2,3,4]
        // reverse颠倒数组元素顺序
        console.log(arr1.reverse())
        // [4,3,2,1]
        console.log(arr1.reverse())
        // 删除数组第一个元素并返回第一个元素
        console.log(arr1.shift())
        // 1
        // 原数组[1,2,3,4]删除了第一个元素变成了[2,3,4]
        console.log(arr1)
        // [2,3,4]
        var arr1 = [1,2,3,4]
        // slice从某给已有的数组返回选定的元素,相当于切片,参数(start,end)不指定参数相当于显示所有元素,不会改变原数组
        console.log(arr1.slice(0,4))
        // [1,2,3,4]
        // sort对数组排序默认按从小到大排序,并改变原数组顺序
        var arr1 = [2,3,1,5,6]
        console.log(arr1.sort())
        // [1,2,3,5,6]
        // 原数组顺序已经按照排序改变
        console.log(arr1)
        // [1,2,3,5,6]
        arr1 = [1,2,3,4]
        // splice删除元素并向数组添加新元素
        // (index,howmany,item1,.....,itemX)
        // index参数:必须 整数,删除元素的下标即从那个位置开始删除
        // howmany参数:必须整数,删除元素的个数
        // item1,.....,itemX:可选,向数组添加新的项目
        // 以下代表从下标1开始删除2个元素即数组变成[3,4] 然后添加两个元素[2,4]最终数组变成[2,4,3,4]
        
        arr1.splice(0,2,2,4)
        console.log(arr1)
        // [2,4,3,4]
        arr1 = [1,2,3,4]
        // toSource返回对象的源代码
        // console.log(arr1.toSource())
        // toString 将数组转换成字符串并返回结果
        console.log(arr1.toString())
        // 1,2,3,4
        // toLocalString 将数组转换成本地数组并返回结果
        console.log(arr1.toLocaleString())
        // 1,2,3,4
        // unshift在数组开始添加元素,返回数组长度
        console.log(arr1.unshift(0))
        // 5
        // 在数组前加一个元素0新数组为[0,1,2,3,4]
        console.log(arr1)
        // [0,1,2,3,4]
    </script>
</body>
</html>

  函数

  封装一段代码,以方便复用.使代码更加清晰,结构更加明了

  函数的定义

  语法:

function 函数名() {
  // 函数体
}

  函数表达式:

  语法

var fn = function () {
  // 函数体
}

  函数的参数

  参数:函数体内部是一个封闭的空间,需要通过参数的方式,把外部值传递给函数体内部。

  语法:

//带参数的函数声明
function 函数名(形参1,形参2,形参3...){
  //函数体
}
//带参数的函数调用

  函数的返回值

  当函数被调用执行完毕之后,并不是所有场景下都需要把结果打印出来。有些业务场景下需要,把函数的执行结果返回,方便进行后续的运算操作。这时,就可以让函数返回,也就是函数的返回值。函数可以通过return关键字语法,返回函数的返回值。

  ①return 之后的代码将不在执行

  ②函数默认返回值为undifined

  语法

//声明一个带返回值的函数
function 函数名(形参1, 形参2, 形参3...) {
  //函数体
  return 返回值;
}

//可以通过变量来接收这个返回值
var 变量 = 函数名(实参1, 实参2, 实参3...);

  示例 不带返回值的函数

#9_函数.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>函数</title>
    </head>
    <body>
        <script>
            // 定义函数sayHello
            function sayHello(person){
                console.log(person+",早上好")
            }
            // 调用函数才执行
            sayHello("老婆")
            sayHello("老师")
        </script>
    </body>
    </html>

  有返回值的函数

  <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>函数</title>
    </head>
    <body>
        <script>        
            // 定义函数sayHello使用返回值
            function sayHello(person){
                str = person+",早上好";
                return str;
            }
            // 调用函数才执行
            console.log(sayHello("老婆"))
            console.log(sayHello("老师"))
        </script>
    </body>
    </html>

  对象

  js是基于对象的语言

  对象:由属性和方法组成

  语法

var person = {
  name: 'linux',
  age: 18,
  sex: true,
  say: function () {
    console.log(this.name);
  }
};

  对象示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象</title>
</head>
<body>
    <script>
        var person = {
        name:'linux',
        age:18,
        sex:true,
        say: function(){
            console.log(this.name);
        }
        }
        
    </script>
  
</body>
</html>

  对象可以定义key value属性类似于字典,也可以在对象内部定义方法

  显示对象属性可以打印 person.age

  DOM

  学习DOM就可以使用javaScript进行控制页面(样式、元素属性、隐藏显示等)

  什么是DOM

  DOM 是浏览器对象模型,这是由浏览器生成的一个树形结构,使编程语言可以很容易的访问HTML结构。

  在 DOM 中可以通过 document 获取整个页面。

 

 

  获取页面元素

  ①getElementById() 根据 id 获取元素

  ②getElementsByTagName()   根据标签名称 获取元素(集合)

  ③querySelector()   使用选择器获取元素,只返回第一个匹配的元素

  ④querySelectorAll()    使用选择器获取元素,返回所有匹配的元素(集合)

#10_DOM操作.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM</title>
</head>
<body>
    <h1 id="myh1">这是一个h1</h1>
    <!-- <h1>这是另外一个h1</h1> -->
    <script>
        // getElementById() 	根据 id 获取元素
        console.log(document.getElementById('myh1'));
        // <h1 id="myh1">这是一个h1</h1>
        // getElementsByTagName()   根据标签名称 获取元素(集合)
        // 获取的是一个集合,需要遍历输出 本例只有一个元素
        myh1s = document.getElementsByTagName('h1')
        for (var index=0;index < myh1s.length;index++){
            console.log(myh1s[index]);
        }
        // <h1 id="myh1">这是一个h1</h1>
        // querySelector()   使用选择器获取元素,只返回第一个匹配的元素
        console.log(document.querySelector('h1'))
        // <h1 id="myh1">这是一个h1</h1>
        // querySelectorAll()    使用选择器获取元素,返回所有匹配的元素(集合) 本例只有一个元素
        myh1s2 = document.querySelectorAll('h1')
        for (var index=0;index < myh1s2.length;index++){
            console.log(myh1s2[index]);
        }
        // <h1 id="myh1">这是一个h1</h1>
    </script>
</body>
</html>

 

 

querySelector也可以通过ID取搜索 ID前加#
document.querySelector('#myh1')

  设置元素属性  

  获取到元素,可以设置元素对应的属性,改变页面的效果

  - 普通元素的属性

    - HTML 中标签的属性一般对应 DOM 中元素的属性,DOM 中元素的属性,例如:

     title、src、id 等

  - 通过元素的 innerHTML 属性可以设置标签之间的内容

      - 通过 innerHTML 动态生成列表

  示例:修改title内容和h1内容

  默认title标题为Document  下面通过设置元素属性方法修改

 <h1 id="myh1">这是一个h1</h1>
    <script>
        // // getElementById() 	根据 id 获取元素
  
        // title修改
        document.querySelector('title').innerHTML='DOM操作'
       // h1内容修改
        document.querySelector('#myh1').innerHTML='修改h1的内容'
    </script>

  页面显示

 

   - 表单元素的属性

    - value、checked、selected、disabled

    - 遍历文本框给所有文本框赋值

    - 获取下拉框中的选项,设置下拉框中显示的项

    - 禁用按钮

   示例

    <form>
        姓名:<input type='text' name='username' value=""/>
    </form>
    <!-- <h1>这是另外一个h1</h1> -->

        // 表单元素的属性
        document.querySelector('input').value='js输入'
    </script>

 

   注册事件

  DOM中的事件机制,可以实现一些常规操作。比如:点击按钮,按下键盘等的响应。

  语法:

element.onclick = function () {
  alert('hello world');
};

  常用事件:

 

   示例

#10_DOM操作
// 鼠标移动到对应为事件
    document.querySelector('#myh1').onmouseover=function(){
            console.log(new Date().getTime())
        }
        // 按键事件显示时间戳
        document.querySelector('input').onkeydown=function(){
            console.log(new Date().getTime())
        }

 

 

 

   改变元素样式

  改变行内样式

element.style.color = 'red';

  改变类样式

element.className = 'active';

  示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .redstyle{
            color:red;
        }
    </style>
</head>
<body>
    <h1 id="myh1">这是一个h1</h1>
        document.querySelector('#myh1').onclick=function(){
            // console.log(this)
            // 改变行内样式当点击的时候执行
            // this.style.color='red'
            // 按照定义的样式执行,样式名为redstyle
            this.className='redstyle'
        }
    </script>
</body>
</html>

  页面显示

 

 

 

 

  

  

 

posted @ 2020-11-18 16:09  minseo  阅读(274)  评论(0编辑  收藏  举报