当前位置:   article > 正文

【Day 2】JavaScript、Vue

【Day 2】JavaScript、Vue

1 引入方式

  • 内部脚本 --- 将 JS 代码定义在 HTML 页面中
  1. <script>
  2. alert("Hello javaScript")
  3. </script>

JavaScript 代码必须位于 <script></s

cript> 标签之间(而不能自闭合
HTML 文档中,可以在任意地方,放置任意数量的 <script>
一般会把脚本置于 <body> 元素的底部,可改善显示速度

  1. <body>
  2. <script>
  3. alert("hello JS");
  4. </script>
  5. </body>

  • 外部脚本 --- 将 JS 代码放在 JS 文件中

通过 src 引用

  1. <body>
  2. <script src="JS/demo.js"></script>
  3. </body>

demo.JS 文件

alert("hello JS");

2 基本语法

2.1 输出语句

  • window.alert()

写入警告框

注:window. 可以省略

  • document.write()

写入 HTML 输出

  • console.log()

写入浏览器 console 控制台

2.2 变量

2.2.1 var

使用 var 关键字声明变量

  1. var a = 20;
  2. a = "张三”;
  3. var a = 10; // 重复定义

 同时 JavaScript 是弱类型语言,变量可以存放不同类型的值

特点:

  • 全局变量
  • 允许重复定义

2.2.2 let

特点:

  • 只在当前的代码块有效
  • 不允许重复定义

2.2.3 const

特点:

  • 常量,一旦声明,不可改变

2.3 数据类型、运算符、流程控制

2.3.1 数据类型

JavaScript 的数据类型分为:

  • 原始类型
  • 引用类型

使用 typeof() 可以获得变量的类型

  1. var a = 10;
  2. alert(a); // number

原始类型

  • number
  • string
  • boolean
  • null
  • undefined(当声明的变量未初始化时,默认undefined)

引用类型

  • Object
  • Array
  • Function
  • Date
  • RegExp
  • Map
  • Set

2.3.2 运算符

  • 算术运算符:

+ - * / % ++ --

  • 赋值运算符

= += -= *= /= %=

  • 比较运算符

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

  • 逻辑运算符

&& || !

  • 三元运算符

条件表达式?true_value:false_value

== 与 === 的区别:

  • == 会进行类型转换
  • === 则不会
  1. var a = 10;
  2. alert(a == "10"); //true
  3. alert(a ==="10"); //false
  4. alert(a === 10); //true

2.3.3 类型转换

string 转为 number:

        将字符串字面值转为数字。如果字面值不是数字,则转为NaN

其他类型转为 boolean:

        number:0和NaN为false,其他为 true

        string:空字符串为 false,其他为 true

        null 和 undefined:为 false

2.3.4 流程控制

  • if...else
  • switch
  • for
  • while
  • do...while

3 函数

声明语句一

  1. function functionName(参数1,参数2..){
  2. //要执行的代码
  3. }

 注:

  • 形参不需要类型(JavaScript 是弱类型语言)
  • 返回值不需要定义类型

例如

  1. function add(a, b){
  2. return a + b;
  3. }
  4. alert(add(2, 3)); // 5

声明语句二

  1. var functionName = function(参数1,参数2..){
  2. //要执行的代码
  3. }

例如

  1. var multiply = function (a, b) {
  2. return a * b;
  3. }
  4. alert(multiply(2, 3));

4 对象

JavaScript 对象分为三类:

  • 基础对象
  • 浏览器对象模型(BOM)
  • 文档对象模型(DOM)

4.1 基础对象

4.1.1 Array

声明一

var arr = new Array(1, 2, 3, 4);

声明二

var arr = [1, 2, 3, 4];

访问

arr[10]= "hel1lo";

注:数组长度可变,类型可变

Array 的属性:

  • length

Array 的方法:

  • forEach()

        遍历数组中的每个有值的元素,并调用一次传入的函数

  • push()

        尾部添加新元素,返回新数组长度

  • splice()

        从数组中删除元素

例如

  1. var arr = [5,7,4,1];
  2. for (let i = 0; i < arr.length; i++) {
  3. console.log(arr[i]);
  4. }
  1. arr.forEach(
  2. function(e){
  3. console.log(e);
  4. }
  5. )

注:forEach()的形参是一个函数,每次要调用这个函数

这样写太繁琐,所以用“箭头函数”进行简化:

(非常像 Java 的 Lambda 表达式,格式 (形参)=>{函数体}    )

  1. arr.forEach(
  2. (e)=>{
  3. console.log(e);
  4. }
  5. )

4.1.2 String

声明一

var str = new string("Hello String");

声明二

var str = "Hello string";

属性:

  • length

方法:

  • charAt()
  • indexOf()
  • trim()
  • substring()

4.1.3 JSON

JavaScript 的自定义对象:

  1. var 对象名 = {
  2. 属性名1: 属性值1,
  3. 属性名2: 属性值2,
  4. 属性名3: 属性值3,
  5. 函数名称: function(形参列表){}
  6. }

JSONJavaScript Object Notation,JavaScript 对象标记法

JSON 是通过JavaScript 对象标记法书写的文本

由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输

如:

{

        "name":"Tom",    

        "age":20,

        "gender":"male"

}

声明

var 变量名 = '{"key1":value1, "key2":value2}';

例如

var userStr = '{"name":"rain", "age":17}';

注:不能换行,必须用单引号引起来

两种转换方法:

  • JSON 字符串转为 JS 对象
var JSObject = JsoN.parse(userstr);
  • JS 对象转为 JSON 字符串
var JSONString = JsoN.stringify(jsobject);

4.2 浏览器对象模型 BOM

Browser Object Model,允许 JavaScript 与浏览器对话,将浏览器的各个组成部分封装为对象:

  • Window:浏览器窗口对象
  • Navigator:浏览器对象
  • Screen:屏幕对象
  • History:历史记录对象
  • Location:地址栏对象

4.2.1 window

获取 window 对象:(可省略)

window. 

属性

  • history
  • location
  • navigator

方法

  • alert()
  • confirm()

显示带有一段消息以及确认按钮和取消按钮的对话框,并且带有返回值

例如

  1. var judge = confirm("confirm you want");
  2. if (judge) {
  3. document.write("you just yes");
  4. }else{
  5. document.write("you just no");
  6. }

如果点了确定,就会显示 yes,反之,no

  • setInterval();

按照指定的周期(以毫秒计)来调用函数或计算表达式,第一个参数是函数,第二个参数是周期毫秒

例如

  1. var i = 0;
  2. setInterval(
  3. (e)=>{
  4. i++;
  5. document.write(" now it is "+i+"sec");
  6. }
  7. ,1000)
  • setTimeout()

在指定的毫秒数后调用函数或计算表达式

4.2.2 location

获取:

window.location.

或(window. 可省略)

location.

属性:

  • href

设置或返回完整的 URL

例如

  1. var loc = location.href;
  2. document.write(loc);
  3. location.href = "http://baidu.com";

先写入当前 URL,然后改为百度的 URL,页面跳转

4.3 文档对象模型 DOM

Document Object Model,将标记语言的各个组成部分封装为对应的对象:

  • document 整个文档对象
  • element 元素对象
  • attribute 属性对象
  • text 文本对象
  • comment 注释对象

获取 element:

  • 根据 id 属性值获取,返回单个 Element 对象

var h1 = document.getElementById('h1');var h1 = document.getElementById('h1');

  • 根据标签名称获取,返回 Element 对象数组

var divs = document.getElementsByTagName('div');

  • 根据 name 属性值获取,返回 Element 对象数组

var hobbys = document.getElementsByName('hobby');

  • 根据 class 属性值获取,返回 Element 对象数组

var clss = document.getElementsByClassName('cls');

拿到了对象,可以对对象进行修改:

使用方法

innerHTML()

返回或设置当前的值

例如

  1. <body>
  2. <!-- <table border="1px"> 已经弃用-->
  3. <table>
  4. <tr>
  5. <th>序号</th>
  6. <th>品牌Logo</th>
  7. <th>品牌名称</th>
  8. <th>企业名称</th>
  9. </tr>
  10. <tr>
  11. <td>1</td>
  12. <td><img src="img/huawei.jpg" width="80px" /></td>
  13. <td class="chinese">华为</td>
  14. <td class="chinese">华为技术有限公司</td>
  15. </tr>
  16. <tr>
  17. <td>2</td>
  18. <td><img src="img/alibaba.jpg" width="80px"></td>
  19. <td class="chinese">阿里巴巴</td>
  20. <td class="chinese">阿里巴巴集团控股有限公司</td>
  21. </tr>
  22. </table>
  23. <script src="JS/demo.js"></script>
  24. </body>
  1. // demo.js
  2. var chineses = document.getElementsByClassName("chinese");
  3. for (let index = 0; index < chineses.length; index++) {
  4. var c = chineses[index];
  5. var text = c.textContent;
  6. switch (text) {
  7. case '华为':
  8. c.innerHTML = 'HuaWei';
  9. break;
  10. case '阿里巴巴':
  11. c.innerHTML = 'Alibaba';
  12. break;
  13. case '华为技术有限公司':
  14. c.innerHTML = 'Huawei Technologies Co. LTD';
  15. break;
  16. case '阿里巴巴集团控股有限公司':
  17. c.innerHTML = 'Alibaba Group Holding LTD';
  18. break;
  19. default:
  20. break;
  21. }
  22. }

效果:




 

5 案例一

  1. <body>
  2. <img src="img/off.gif" id="light"><br><br>
  3. <input type="button" value="点亮">
  4. <input type="button" value="熄灭">
  5. <div>传智教育</div> <br>
  6. <div>黑马教育</div> <br>
  7. <input type="checkbox" name="hobby"> 电影
  8. <input type="checkbox" name="hobby"> 旅游
  9. <input type="checkbox" name="hobby"> 游戏<br><br>
  10. <input type="button" value="全选">
  11. <input type="button" value="反选">
  12. <!-- <script src="JS/light.js"></script> -->
  13. </body>

 加上JS

  1. var img = document.getElementById("light");
  2. img.src = "img/on.gif";
  3. var divs = document.getElementsByTagName("div");
  4. for (let i = 0; i < divs.length; i++) {
  5. const div = divs[i];
  6. div.innerHTML += "<font color='red'> very good!</font>"
  7. }
  8. var hobbies = document.getElementsByName("hobby");
  9. for (let i = 0; i < hobbies.length; i++) {
  10. const h = hobbies[i];
  11. h.checked = true;
  12. }

6 JS 事件监听

6.1 事件绑定

两种方式:

  • 通过事件属性绑定
  1. <input type="button" onclick="on()" value="按钮1">
  2. <script>
  3. function on(){alert('我被点击了!);
  4. </script>
  • 通过 DOM 元素属性绑定
  1. <input type="button" id="btn" value="按钮2">
  2. <script>
  3. document.getElementById('btn').onclick=function(){
  4. alert('我被点击了!);
  5. }
  6. </script>

6.2 常见事件

事件名说明
onclick鼠标单击
onblur元素失去焦点
onfocus元素获得焦点
onload某个页面或图片完成加载
onsubmit表单提交
onkeydown键盘某个键被按下
onmouseover鼠标移到某个元素
onmouseout鼠标从某个元素移开

注:获得焦点是指文本框里闪动的光标,再点击别处,就是失去焦点

7 案例二

  1. <body>
  2. <img src="img/off.gif" id="light"><br><br>
  3. <input type="button" value="点亮" onclick="on()">
  4. <input type="button" value="熄灭" id="off"><br><br>
  5. <input type="text" value="ITCAST" id="text" onfocus="changeCaseToLower()" onblur="changeCaseToUpper()"><br><br>
  6. <input type="checkbox" name="hobby"> 电影
  7. <input type="checkbox" name="hobby"> 旅游
  8. <input type="checkbox" name="hobby"> 游戏<br><br>
  9. <input type="button" value="全选" id="all">
  10. <input type="button" value="反选" id="anti">
  11. <script>
  12. // 方式一
  13. function on() {
  14. var img = document.getElementById("light");
  15. img.src = "img/on.gif"
  16. }
  17. // 方式二
  18. document.getElementById("off").onclick = function () {
  19. var img = document.getElementById("light");
  20. img.src = "img/off.gif";
  21. }
  22. function changeCaseToLower() {
  23. var str = document.getElementById("text");
  24. var lowerCase = str.value.toLowerCase();
  25. str.value = lowerCase;
  26. }
  27. function changeCaseToUpper() {
  28. var str = document.getElementById("text");
  29. var upperCase = str.value.toUpperCase();
  30. str.value = upperCase;
  31. }
  32. document.getElementById("all").onclick = function () {
  33. var hobbies = document.getElementsByName("hobby");
  34. for (let i = 0; i < hobbies.length; i++) {
  35. const hobby = hobbies[i];
  36. hobby.checked = true;
  37. }
  38. }
  39. document.getElementById("anti").onclick = function () {
  40. var hobbies = document.getElementsByName("hobby");
  41. for (let i = 0; i < hobbies.length; i++) {
  42. const hobby = hobbies[i];
  43. hobby.checked = false;
  44. }
  45. }
  46. </script>
  47. </body>

8 Vue

Vue 是一套前端框架免除原生 JavaScript 中的 DOM 操作,简化书写

基于 MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。

  1. <body>
  2. <!-- 第三步:视图层 -->
  3. <div id="app">
  4. <input type="text" v-model="message">
  5. {{message}}
  6. </div>
  7. <!-- 第一步:引入 Vue.js -->
  8. <script src="JS/vue.js"></script>
  9. </body>
  10. <script>
  11. // 第二步:定义 Vue 对象
  12. new Vue({
  13. el: "#app",
  14. data: { // 数据模型
  15. message: "vue!"
  16. }
  17. })
  18. </script>

 插值表达式:

{{表达式}}

 双向数据绑定 v-model="message":

在文本框中输入,同时右边也在变化

8.1 指令

指令:

        HTML标签上带有 v-前缀 的特殊属性

常用指令:

指令作用
v-blind为 HTML 标签绑定属性值
v-model在表单元素上创建双向数据绑定
v-on为 HTML 标签绑定事件
v-if条件性的渲染某元素,判定为 true 时渲染,否则不渲染
v-else-if条件性的渲染某元素,判定为t rue 时渲染,否则不渲染
v-else条件性的渲染某元素,判定为 true 时渲染,否则不渲染
v-show根据条件展示某元素,区别在于切换的是 display 属性的值
v-for列表渲染,遍历容器的元素或者对象的属性

8.1.1 v-bind 与 v-model

v-bind:为 HTML 标签绑定属性值

<div v-bind:href="url">

<div :href="url">

v-model:在表单元素上创建双向数据绑定

  1. <body>
  2. <website id="app">
  3. <!-- 数据绑定 -->
  4. 输入网址:<input type="text" id="userDefineUrl" v-model="url"><br>
  5. <a v-bind:href="url" target="_blank">前往一个网站(默认是百度)</a><br>
  6. <!-- <a :href="url" target="_blank">前往一个网站(默认是百度)</a><br> 还可以省略指令名-->
  7. </website>
  8. <script src="JS/vue.js"></script>
  9. </body>
  10. <script>
  11. new Vue({
  12. el: "#app",
  13. data: {
  14. url:"http://baidu.com",
  15. }
  16. })
  17. </script>

这样做的效果是,不输入的情况下点击超链接,是百度;

如果输入了一个网址,再点击超链接,出现指定网站

8.1.2 v-on

v-on:为 HTML 标签绑定事件

<input type="button" value="按钮" v-on:click="handle()">

<input type="button" value="按钮" @:click="handle()">

函数在 Vue 对象里面 methods 写

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Vue</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <input type="button" value="click me" v-on:click="clickMe()">
  11. <!-- <input type="button" value="click me" @click="clickMe()">-->
  12. </div>
  13. <script src="JS/vue.js"></script>
  14. </body>
  15. <script>
  16. new Vue({
  17. el: "#app",
  18. data: {
  19. url:"http://baidu.com",
  20. },
  21. methods: {
  22. clickMe:function(){
  23. alert("qwq");
  24. }
  25. },
  26. })
  27. </script>
  28. </html>

8.1.3 v-if、v-else-if、v-else 和 v-show

前三者都是条件性的渲染某元素,判定为 true 时渲染,否则不渲染

而 v-show 根据条件展示某元素,区别在于切换的是 display 属性的值

  1. <body>
  2. <div id="app">
  3. input your age <input type="text" v-model="age"> you are
  4. <span v-if="age < 18">child</span>
  5. <span v-else-if="age >= 18 && age < 30">youngster</span>
  6. <span v-else-if="age>=30 && age<60">mid man</span>
  7. <span v-else-if="age>=60 && age<=120">old man</span>
  8. <span v-else>alien</span>
  9. </div>
  10. <script src="JS/vue.js"></script>
  11. </body>
  12. <script>
  13. new Vue({
  14. el: "#app",
  15. data: {
  16. url:"http://baidu.com",
  17. age:10,
  18. }
  19. })
  20. </script>

 效果:

 v-show 显示效果和 if 一样,但是 show 是都渲染

8.1.4 v-for

列表渲染,遍历容器的元素或者对象的属性

  1. <body>
  2. <div id="app">
  3. <f v-for="(addr, index) in addrs">
  4. {{index}}:{{addr}} <!--插值表达式,直接在屏幕上显示-->
  5. </f>
  6. </div>
  7. <script src="JS/vue.js"></script>
  8. </body>
  9. <script>
  10. new Vue({
  11. el: "#app",
  12. data: {
  13. url: "http://baidu.com",
  14. age: 10,
  15. addrs: ['beijing', 'shanghai', 'herbin'],
  16. },
  17. })
  18. </script>

 9 案例三

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. #fail {
  9. color: red;
  10. }
  11. table {
  12. border-collapse: collapse;
  13. width: 20%;
  14. }
  15. th,
  16. td {
  17. border: 1px solid black;
  18. text-align: center;
  19. }
  20. /* span,td{
  21. font-size: 25px;
  22. } */
  23. </style>
  24. </head>
  25. <body>
  26. <table id="app">
  27. <tr>
  28. <th>编号</th>
  29. <th>姓名</th>
  30. <th>年龄</th>
  31. <th>性别</th>
  32. <th>成绩</th>
  33. <th>等级</th>
  34. </tr>
  35. <tr v-for="(user, index) in users">
  36. <td>{{index+1}}</td>
  37. <td>{{user.name}}</td>
  38. <td>{{user.age}}</td>
  39. <td>
  40. <span v-if="user.gender==1"></span>
  41. <span v-else></span>
  42. </td>
  43. <td>{{user.score}}</td>
  44. <td>
  45. <span v-if="user.score < 60" id="fail">不及格</span>
  46. <span v-else-if="user.score>=60 && user.score<80">及格</span>
  47. <span v-else>优秀</span>
  48. </td>
  49. </tr>
  50. </table>
  51. <script src="JS/vue.js"></script>
  52. </body>
  53. <script>
  54. new Vue({
  55. el: "#app",
  56. data: {
  57. users: [{
  58. name: 'Tom',
  59. age: 20,
  60. gender: 1,
  61. score: 78
  62. }, {
  63. name: 'Rose',
  64. age: 18,
  65. gender: 2,
  66. score: 86
  67. }, {
  68. name: 'Jerry',
  69. age: 26,
  70. gender: 1,
  71. score: 90
  72. }, {
  73. name: 'Tony',
  74. age: 30,
  75. gender: 1,
  76. score: 52
  77. }]
  78. }
  79. })
  80. </script>
  81. </html>

10 Vue 的生命周期

主要关注 mounted

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <script src="JS/vue.js"></script>
  8. </head>
  9. <body>
  10. <div id='app'>
  11. </div>
  12. </body>
  13. <script>
  14. new Vue({
  15. el:'#app',
  16. mounted() {
  17. alert("vue挂载完成, 发送请求到服务端");
  18. },
  19. })
  20. </script>
  21. </html>

用 el 去挂载一个 DOM 元素,挂载完成,就执行 mounted 方法

类似的,八个生命周期都有各自的方法,都在指定的生命周期执行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/460437
推荐阅读
相关标签
  

闽ICP备14008679号