经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
030_JavaScript - 清风(学习-踏实)
来源:cnblogs  作者:清风(学习-踏实)  时间:2021/2/22 9:04:27  对本文有异议


前端知识体系

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

什么是JavaScript

JavaScript是一门世界上最流行的脚本语言。
ECMAScript可以理解为是JavaScript的一个标准。
最新版本es6。
但是大部分浏览器还只停留在支持es5代码上。
开发环境和生产环境版本不一致。

快速入门

引入JavaScript

  1. 内部标签
  2. 外部引入
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <!--内部标签-->
  7. <script>
  8. // alert('hello,world');
  9. </script>
  10. <!--外部引入-->
  11. <script src="js/main.js"></script>
  12. </head>
  13. <body>
  14. </body>
  15. </html>
  1. alert('hello,world');

基本语法入门

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script>
  7. // 1.定义变量 变量类型 变量名 = 变量值;
  8. var num = 1;
  9. // 2.条件控制
  10. alert(num);
  11. if (2>1) {
  12. alert("true");
  13. }
  14. // 3.在浏览器控制台打印变量
  15. console.log(num);
  16. </script>
  17. </head>
  18. <body>
  19. </body>
  20. </html>

数据类型

Number 数字

js不区分整数和小数

  1. 123 // 整数
  2. 123
  3. 123.1 // 浮点数
  4. 123.1
  5. 1.231e2 // 科学计数法
  6. 123.1
  7. -123 // 负数
  8. -123
  9. NaN // not a number
  10. NaN
  11. Infinity // 表示无限大
  12. Infinity

String 字符串

  1. 'abc'
  2. "abc"
  3. "abc"
  4. "abc"

Boolean 布尔

  1. console.log(2>1)
  2. VM520:1 true
  3. console.log(2<1)
  4. VM568:1 false

Null 对空

Undefined 未定义

Symbol 独一无二的值

Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

Array 数组

  1. var arr = [1,2,3,4,'ab',null,true];
  2. new Array(1,2,3,4,'ab',null,true);
  3. console.log(arr[2]);

Object 对象

  1. var person = {
  2. name:'zhangyq',
  3. age:18,
  4. tags:['java','js','web']
  5. }
  6. console.log(person.age);

Function 函数

严格检查模式strict

  1. /*
  2. 前提:IDEA需要设置支持ES6语法
  3. 'use strict';严格检查模式,预防JavaScript的随意性导致产生的一些问题
  4. 必须写在JavaScript的第一行
  5. 局部变量建议都使用let去定义,如:let i = 1;
  6. */
  7. //严格检查模式strict,严格加成模式下,i = 1报错
  8. 'use strict';
  9. //全局变量
  10. //i = 1;

IDEA设置支持ES6语法
image.png

数据类型

字符串

  1. 'use strict';
  2. // 1.正常字符串使用单引号或双引号包裹
  3. console.log('a');
  4. console.log("a");
  5. // 2.注意转义字符
  6. console.log('a\'');
  7. console.log("a\'");
  8. console.log('a\nb');
  9. console.log('\u4e2d'); // Unicode
  10. console.log('\x41'); // Ascll
  11. // 3.多行字符串编写,使用反引号`
  12. var msg = `hello
  13. world
  14. 你好`;
  15. console.log(msg);
  16. // 4.模板字符串,使用反引号`和$
  17. let name='zhangyq';
  18. console.log(`nihao,${name}`);

数组

  1. // 数组可以包含任意的数据类型
  2. var arr=[0,1,2,3,4,5];
  3. // slice() 截取数组的一部分,返回一个新的数组
  4. var arr1=arr.slice(3);
  5. // push() 压入到尾部
  6. arr.push('a','b');
  7. // pop() 弹出最后一个
  8. arr.pop();
  9. // unshift() 压入到头部
  10. arr.unshift('a','b');
  11. // shift(); 弹出第一个
  12. arr.shift();
  13. // sort() 排序
  14. var arr=['B','C','A'];
  15. arr.sort();
  16. console.log(arr);
  17. // reverse() 反转
  18. arr.reverse();
  19. console.log(arr);
  20. // concat() 拼接,返回新的数组,不改变原来的数组
  21. var arr2=arr.concat([1,2,3]);
  22. console.log(arr2);
  23. console.log(arr);
  24. // join() 打印拼接数组,使用特定的字符串连接
  25. console.log(arr.join('-'));
  26. // 多维数组
  27. var arr=[[1,2],[3,4],['a','b']];

对象

  1. var person={
  2. name:"zhangyq",
  3. age:18,
  4. phone:"13299998888"
  5. }
  6. person.name="zhangsf";
  7. //删除对象属性
  8. delete person.name
  9. //添加对象属性
  10. person.email="zhangsf@163.com"
  11. //判断属性是否在这个对象中
  12. 'age' in person
  13. //判断方法是否在这个对象中
  14. 'toString' in person
  15. 判断属性或方法是否是自身拥有的
  16. person.hasOwnProperty('age');
  17. person.hasOwnProperty('toString');

流程控制

  1. if判断
  2. while循环
  3. for循环
  4. forEach循环
  5. for...in
  6. for...of
  1. //forEach循环
  2. var arr=[1,2,2,3,4,5];
  3. arr.forEach(function(value){
  4. console.log(value);
  5. });
  6. //for...in的值是索引
  7. for(var index in arr){
  8. console.log(arr[index]);
  9. }
  10. //for...of循环的是具体的值
  11. for(var v of arr){
  12. console.log(v);
  13. }

Map和Set ES6新特性

  1. //Map
  2. var map=new Map([['tom',100],['jack',90],['join',80]]);
  3. var name=map.get('tom');
  4. map.set('admin',123);
  5. map.delete('admin');
  6. //Set 无序不重复集合
  7. var set=new Set([1,2,2,3,3]); // set可以去重
  8. set.add(4);
  9. set.delete(1);
  10. console.log(set.has(2)); // 是否包含某个元素

函数

定义函数

  1. 定义方式一
  1. // 一旦执行到return代表函数结束,返回结果!
  2. // 如果没有执行return,函数执行完也会返回结果,结果就是undefined。
  3. function abs(x){
  4. if(x>=0){
  5. return x;
  6. }else{
  7. return -x;
  8. }
  9. }
  10. abs(-10);
  1. 定义方式二
  1. // function(x){...}是匿名函数,通过abs就可以调用函数!
  2. var abs=function(x){
  3. if(x>=0){
  4. return x;
  5. }else{
  6. return -x;
  7. }
  8. }
  9. abs(-10);

JavaScript可以传任意个参数,也可以不传递参数!

  1. var abs=function(x){
  2. //手动抛出异常
  3. if(typeof x !== 'number'){
  4. throw 'Not a Number';
  5. }
  6. if(x>=0){
  7. return x;
  8. }else{
  9. return -x;
  10. }
  11. }

arguments

  1. arguments代表所有的参数,是一个数组
  1. var abs=function(x){
  2. if(arguments.length=1){
  3. return x;
  4. }else if(arguments.length>1){
  5. return arguments.length;
  6. }
  7. }

rest

  1. ES6引入的新特性,获取除了已经定义的参数之外的所有参数
  2. rest参数只能写在最后面,必须用...标识
  1. function fun(a,b,...rest){
  2. console.log("a->"+a);
  3. console.log("b->"+b);
  4. console.log(rest);
  5. }

变量的作用域

  1. 函数体中声明的变量,函数体外不可以使用(非要实现的话,可以研究下闭包)
  1. function fun(){
  2. var x=1;
  3. x=x+1;
  4. }
  5. x=x+2; // Uncaught ReferenceError: x is not defined
  1. 内部函数可以访问外部函数的变量,反之则不行
  1. function funA(){
  2. var x=1;
  3. function funB(){
  4. var y=x+1;
  5. }
  6. var z=y+1; // Uncaught ReferenceError: y is not defined
  7. }
  1. 全局变量:定义在函数外部
  1. var x=1;
  2. function f(){
  3. console.log(x);
  4. }
  5. console.log(x);
  1. 全局对象window:默认所有的全局变量,都会自动绑定在window对象下
  1. var x=1;
  2. console.log("x->"+x);
  3. console.log("window.x->"+window.x);
  1. JavaScript实际只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,直到全局作用域window也没有找到,就会报错
  2. 由于所有的全局变量都会绑定在window上,如果不同的js文件,使用了相同的全局变量,会冲突,如何减少冲突?把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题
  1. // 唯一全局变量
  2. var main={};
  3. //定义全局变量
  4. main.name='zhangyq';
  5. main.add=function(a,b){
  6. return a+b;
  7. }

let 局部变量声明

  1. function f(){
  2. for(var i=0;i<100;i++){
  3. console.log(i);
  4. }
  5. console.log(i+1); // 101 问题?i出了作用域还可以使用
  6. }

ES6 let关键字,解决局部作用域问题!

  1. function f(){
  2. for(let i=0;i<100;i++){
  3. console.log(i);
  4. }
  5. console.log(i+1); // Uncaught ReferenceError: i is not defined
  6. }

建议使用let去定义局部作用域的变量

const 常量声明 只读变量

  1. const PI=3.14; // 只读变量
  2. console.log(PI);
  3. pi=3.15; // TypeError: Assignment to constant variable

方法

  1. 方法就是把函数放在对象的里面
  1. var qing={
  2. name:'zhangyq',
  3. birth:2000,
  4. age:function(){
  5. var now=new Date().gerFullYear();
  6. return now-this.birth;
  7. }
  8. }
  9. qing.name;
  10. qing.age();
  1. apply指定调用方法的对象

内部对象

Date

方法自查

Json

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

  1. var user={name:"zhangyq",age:18,sex:'男'}
  2. //对象转化为json字符串
  3. var jsonStr=JSON.stringify(user);
  4. //对象{name: "zhangyq", age: 18, sex: "男"}
  5. //json字符串{"name":"zhangyq","age":18,"sex":"男"}
  6. //json字符串转化为对象
  7. var obj=JSON.parse(jsonStr);

面向对象编程

原型继承

  1. var user={name:"zhangyq",age:18,sex:'男'}
  2. var xiaoming={name:"xiaoming"}
  3. //xiaoming的原型是user
  4. xiaoming.__proto__=user
  5. /*xiaoming
  6. {name: "xiaoming"}
  7. name: "xiaoming"
  8. __proto__:
  9. age: 18
  10. name: "zhangyq"
  11. sex: "男"
  12. __proto__: Object
  13. */

class继承

class关键字是在ES6引入的

  1. //定义一个类,属性,方法
  2. class Student{
  3. constructor(name){
  4. this.name=name;
  5. }
  6. hello(){
  7. alert('hello');
  8. }
  9. }
  10. var xiaoming=new Student('xiaoming');
  11. var xiaohong=new Student('xiaohong');
  1. //继承
  2. class XiaoStudent{
  3. constructor(name,grade){
  4. super(name);
  5. this.grade=grade;
  6. }
  7. myGrade(){
  8. alert('我是一名小学生');
  9. }
  10. }

操作BOM对象

  1. 浏览器介绍
    1. IE6~11
    2. Chrome
    3. Safari
    4. FireFox
  2. window 代表浏览器窗口
  1. window.alert(1)
  2. window.innerHeight
  3. window.outerHeight
  1. navigator 封装了浏览器的信息
  2. screen 代表屏幕
  1. screen.width
  2. screen.height
  1. location 代表当前页面的URL信息
  1. location
  2. //刷新页面
  3. location.reload()
  4. //跳转页面
  5. location.assign('www.baidu.com');
  1. document 代表当前的页面
  1. document.title
  2. document.title='我的页面'
  3. //获取cookie
  4. document.cookie
  1. history 代表浏览器历史记录
  1. history.back()
  2. history.forward()

操作DOM对象

DOM 文档对象模型
浏览器网页就是一个DOM树形结构

  1. <div id="div1">
  2. <h1>标题一</h1>
  3. <p id="p1">p1</p>
  4. <p class="p2">p2</p>
  5. </div>
  1. //根据标签名查询
  2. var h1Array=document.getElementsByTagName('h1');
  3. //根据ID查询
  4. var p1=document.getElementById('p1');
  5. //根据class名查询
  6. var p2Array=document.getElementsByClassName('p2');
  7. var div1=document.getElementById('div1');
  8. //获取子节点
  9. var childrens=div1.children;
  10. //修改文本值
  11. p1.innerText='123';
  12. //修改html
  13. p1.innerHTML='<strong>123</strong>';
  14. //修改css样式
  15. p1.style.color='red';
  16. //删除节点,只能通过父节点删除子节点
  17. div1.removeChild(p1);
  18. p1.parentElement.removeChild(p1);
  19. div1.removeChild(div1.children[2]);
  20. div1.removeChild(div1.children[1]);
  21. div1.removeChild(div1.children[0]);
  22. //追加已有标签
  23. div1.appendChild(p2);
  24. //创建标签并追加
  25. var p4=document.createElement('p');
  26. p4.id='p4';
  27. p4.innerText='p4';
  28. p4.setAttribute('class','p2');
  29. div1.appendChild(p4);
  30. //插入p2节点到p1前
  31. div1.insertBefore(p2,p1);

操作表单(MD5加密密码)

  1. <!--MD5工具类-->
  2. <script src="https//cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
  3. <form method="post" action="#">
  4. <p><span><label>用户名 </label></span><input type="text" id="username" name="username"></p>
  5. <p><span><label>密码 </label></span><input type="password" id="password"></p>
  6. <input type="hidden" id="md5_password" name="password">
  7. <p><button type="submit" onclick="submit()">提交</button></p>
  8. </form>
  1. //获取input
  2. var input_username=document.getElementById('username');
  3. //获取input的值
  4. var username=input_username.value;
  5. //修改input的值
  6. input_username.value='zhangyq';
  7. function submit(){
  8. var username=document.getElementById('username').value;
  9. var password=document.getElementById('password').value;
  10. console.log(username);
  11. console.log(password);
  12. //MD5加密密码
  13. md5_password=md5(password);
  14. console.log(md5_password);
  15. document.getElementById('md5_password').value=md5_password;
  16. }

jQuery

jQuery库 封装了大量JavaScript函数

下载引用jQuery库

下载:https://jquery.com

  1. <!--引用在线或本地的-->
  2. <!--在线版-->
  3. <script src="https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>
  4. <!--开发版-->
  5. <script src="js/jquery-3.5.1.js"></script>
  6. <!--生产压缩版-->
  7. <script src="js/jquery-3.5.1.min.js"></script>

公式 $(selector).action()

  1. <a id="a1"></a>
  1. $('#a1').click(function(){
  2. alert('hello');
  3. });

jQuery与JavaScript对比

  1. //JavaScript
  2. document.getElementsByTagName();
  3. document.getElementById();
  4. document.getElementsByClassName();
  5. //jQuery css中的选择器全部可以使用,如:层级选择器,伪类选择器,属性选择器等
  6. $('p').click();
  7. $('#id').click();
  8. $('.class').click();

事件

  1. 鼠标事件
  2. 键盘事件
  3. 其他事件

image.png

  1. <style>
  2. #divMove{
  3. width: 500px;
  4. height: 500px;
  5. border: 1px solid red;
  6. }
  7. </style>
  8. <!--获取鼠标当前的坐标-->
  9. mouse: <span id="mouseMove"></span>
  10. <div id="divMove">在这里移动鼠标</div>
  11. <script>
  12. //当网页元素加载完毕后,响应事件
  13. //$(document).ready(function(){});
  14. //可简化为
  15. $(function(){
  16. $('#divMove').mousemove(function(e){
  17. $('#mouseMove').text('x:'+e.pageX+'y:'+e.pageY);
  18. });
  19. });
  20. </script>

操作DOM元素

  1. $('#test_ul li[name=python]').text();
  2. $('#test_ul li[name=python]').html();
  3. $('#test_ul li[name=python]').css({"color":"#ff0011","background":"blue"});
  4. $('#test_ul li[name=python]').css("color","#ff0011");
  5. $('#test_ul li[name=python]').css("color");
  6. $('#test_ul li[name=python]').hide();
  7. $('#test_ul li[name=python]').show();
  8. $('#test_ul li[name=python]').toggle();
  9. $(window).width();
  10. $(window).height();

jQuery中文文档:https://jquery.cuishifeng.cn/

小技巧

巩固JS 看jQuery源码,看小游戏源码-源码之家

源码之家:https://www.mycodes.net/

巩固HTML/CSS 扒网站,down下来,对应修改看效果

扒网站步骤:

  1. 打开网站,选择Elements,选中代码,按Delete删除,不影响页面继续删除,影响页面回退,删除下一行,直到没有删除的为止。

image.png

  1. 右键选择Copy->Copy outerHTML,复制代码,然后将代码粘贴到自己的HTML文件中,修改相应的html和css。

image.png

原文链接:http://www.cnblogs.com/wl3pb/p/14427950.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号