前端JavaScript、实用前端网站、前端小技巧

1 篇文章 0 订阅
1 篇文章 0 订阅

1. 什么是JavaScript?

概述:JavaScript是一门世界上最流行的脚本语言

注:Java与JavaScript本身并无干系
  一个合格的Java程序员必须必须必须精通JavaScript,甚至超过Java,因为在工作中极大可能写JavaScript的工程量大于Java
  JavaScript起源小故事:https://blog.csdn.net/kese7952/article/details/79357868
(仅供学习,并无商业用途)

2. JavaScript语言规范是什么?

JavaScript遵循ECMAScript规范,最新版本已经更新到ES6,但大部分浏览器不兼容,但对于ES5所有浏览器绝对兼容

3.快速入门

3.1 引入JavaScript
  • 内部引入
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js入门</title>
<!--js需要使用Script标签-->
    <script>
        //一个简单的弹窗
        alert("hello world");
    </script>
</head>
<body>

</body>
</html>
  • 外部引入
alert("hello")
	<!--js需要使用Script标签-->
    <!--script标签必须成对出现-->
    <script src="js2.js"></script>
3.2 基本语法入门
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本语法入门</title>
    <script>

        // 定义变量
        // js严格区分大小写
        var 变量名 = 变量值;

        // 条件控制
        if(2>1){
            alert(2);
        }

        //在浏览器的控制台打印变量
        console.log(变量);
    </script>
</head>
<body>

</body>
</html>

4. 数据类型

//js不区分整数和小数
数字: number
字符串: "" '' ``
布尔值: true false
逻辑运算: && || !
//建议坚持使用===比较
比较运算: = ==(只比较值) ===(绝对等于)
null 和 undefined 
空       未定义

//数组
//js中的数组没有java数据类型那么严谨
//如果取数组下标越界时就会报undefined
var arr = [1,2,3,"","123","数字"]

//对象
 var 对象名 = {
            属性:属性值,
            属性2:属性值
        }

NaN与所有数值都不相等,甚至NaN不等于NaN

在Java和JS中尽量避免使用浮点数进行运算可能出现精度问题

4.1 严格检查模式
/*
    严格检查模式
    'use strict';
    一般放在js代码块的第一行
    ide必须支持se6格式
    局部变量推荐使用let定义
 */
4.2 字符串
  1. 普通字符串使用 ‘单引号’ 或 “双引号”
var name = "喵喵喵";
var name = '喵呜';
  1. 一些特殊字符要用到转义字符(具体可自行百度)

  2. 多行字符串使用tab键上面的``

var abc = `别看
            我只是
             一只羊
         ` ;
  1. 模板字符串
  let name = "喵喵喵";

  console.log(`你好${name}`);
  1. 字符串的不可变性

  2. 大小写转换

let name = "abc";
    //转大小写
    console.log(name.toUpperCase());
    console.log(name.toLowerCase());
  1. indexOf()获取索引
//得到该字符在字符串中的索引值
console.log(name.indexOf('b'))
  1. subString()截取
//截取第一个到最后一个
console.log(name.substring(1))
//截取[1,3)
console.log(name.substring(1,3))
4.3 数组
  1. js数组长度可变赋值过小,元素会丢失
  2. slice()截取数组的一部分,返回新的数组
//数组截取
var array1 = [1,2,3,4,5,6];
array1.slice(2);
alert(array1.slice(2));
  1. push(): 向数组尾部推送元素
//push() 向尾部推送数据
var array1 = [1,2,3,4,5,6];
array1.push(1,2,3);
alert(array1);
  1. pop(): 将数组最后一个元素弹出
//pop() 将尾部最后一个数据弹出
var array1 = [1,2,3,4,5,6];
array1.pop(1);
alert(array1);
  1. unshift(): 向数组头部推送元素
//unshift() 向头部推送数据
var array1 = [1,2,3,4,5,6];
array1.unshift(1,1,1);
alert(array1);
  1. shift(): 将数组头部的元素弹出
//shift() 将头部数据弹出
var array1 = [1,2,3,4,5,6];
array1.shift(1);
alert(array1);
  1. sort(): 排序
//sort(): 排序
var array1 = [1,4,6,3,2,7];
array1.sort();
alert(array1);
  1. reverse(): 元素反转
//reverse() 反转
var array1 = [1,4,6,3,2,7];
array1.reverse();
alert(array1);
  1. concat(): 追加数据到一个新的数组中(不会修改原数组)
//concat() 追加数据到一个新数组,原数组不变
var array1 = [1,4,6,3,2,7];
var array2 = array1.concat(1,2,3);
alert(array1);
alert(array2);
  1. 连接符join(): 数组间每个数据之间的连接符号
//join() 连接符号
var array1 = [1,4,6,3,2,7];
alert(array1.join("*"));
  1. 多维数组:
//多维数组
var array1 = [[1,2,3],[4,5,6]];
alert(array1[1][1]);
4.4 对象

对象的属性就是一堆键值对组成,所有的键,也就是属性名都是字符串,值可以是任意类型

//对象
 var 对象名 = {
            属性:属性值,
            属性2:属性值
        }
  1. 对象赋值
对象名.属性名=新属性值;
  1. 使用一个不存在的对象属性不会报错,只会undefined
  2. 动态的删减属性
delete 对象名.属性名
  1. 动态添加属性
对象名.新属性名 = 新属性值;
  1. 判断属性值是否在某对象中
//返回布尔值
'属性名' in person
  1. 判断一个属性是否是这个对象自身拥有的
对象名.hasOwnProperty('字段或者方法名')
4.5 流程控制
//选择结构
if(){}else{}

//while do while循环结构
while(){}
do while(){}

//for循环
for(初始化值;循环条件;迭代语句){
}

//数组循环1
var arr = [1,2,3,4,5];
arr.forEach(function (value, index, array) {

})

//数组循环2
//遍历出下标
for (let 变量 in 对象){
        
}
4.6 Map和Set (ES6新特性)

Map:

//Map中都是键值对
    var Map = new Map();
    //向Map中添加键值对
    Map.set("小明",18);
    //从Map中获取数据
    Map.get("小明");
    //从Map中删除数据
    Map.delete("小明");

Set(数据无序不可重复):

//Set
    var set = new Set();
    //添加数据
    set.add("小明",18)
    //删除数据
    set.delete("小明");
    var boolean = set.has("小明");
    console.log(boolean);
4.7 Iterator (ES6新特性)
for (let 变量 of arr){
        
}

for (let 变量 of set){
        
}

for (let 变量 of map){
        
}

5 函数

5.1 定义函数

//函数的两种定义方式
function 函数名(参数可有可无) {

}
var 变量名 = function () {

}
//函数调用
函数名(参数);
var 变量名 = function (参数1,参数2,...rest) {
            //rest参数只能写在最后面
        }

5.2 变量的作用域

js中定义的变量是有作用域的,若在函数体中声明,则在函数体外不可以使用 (非要想实现的话,后面可以研究一下闭包)

  • 若内部函数与外部函数都有变量,则内部函数可以访问外部,外部不能访问内部,当内外变量名相同时,内部默认屏蔽外部
  • 系统唯一全局对象windows (默认所有的全局变量都会绑定在windows对象下面)

5.3 规范

  • 自己定义一个函数为全局,将所有自己的代码放入其中,减少全局命名冲突的问题

5.4 方法

//函数名
        function 函数名() {
            属性名:function () {
                方法内容
            }
        }
        //调用
        函数名.属性名();

6. 内部对象 (相当于java的内部类)

6.1 Date

  • 基本使用
 var date = new Date();
        date.getFullYear() //年
        date.getMonth(); //月 老外的月份是0~11
        date.getDate() //日
        date.getDay() //星期几
        date.getHours() //时
        date.getMinutes() //分
        date.getSeconds() //秒
        date.getTime() //时间戳
  • 时间转换
//根据事件戳,返回当前事件
console.log(new Date(时间戳));

//转换为本地事件,注意,这里调用的是一个方法名为date
date.toLocaleDateString();

6.2 JSON

  • JSON是一种轻量级的数据格式
  • 任何JS支持的数据类型都可以用JSON无缝转换

格式:

  • 对象都用{ }
  • 数组都用[ ]
  • 所有键值对都用k:v

JS对象和JSON字符串的转换:

 'use strict';
        var user = {
            year:"11",
            name:"以梦"
        }

        //将对象转换为JSON数据
        JSON.stringify(user);
        alert(JSON.stringify(user));

        //将JSON字符串转换为对象
        var user1 = JSON.parse('{"year":"11","name":"以梦"}');

JSON串和JS的区别(具体可自行对比上面代码):

  • JSON串都是由引号包裹的,而且本身就是一个字符串

  • JS对象属性名没有被引号包裹,且本身不是一个字符串

6.3 Ajax

  • 原生的js写法 xhr异步请求
  • JQuery封装好的方法 $("#name").ajax("")
  • axios请求

7. 面向对象编程

7.1 什么是面向对象

JS、Java、C#都是面向对象语言,JS有些区别

  • 类: 模板
  • 对象: 具体的事例
  • 类是对象的抽象,对象是类的具体表现

ES6之后新特性 class{}

  • js类
  class 类名{
            //构造
         constructor(属性名) {
         this.属性名=初始化名
            }
         方法名(){
             
         }
        }
  • js类的继承
class Boy extends Student{
    constructor(name age){
        super(name);
        this.age=age;
    }
    myGrade(){
        alert("我是一名男生")
        }
}
js类的本质还是原型

原型链:js的原型到object后会一直循环,成为一个循环链
  _ proto_:

8. 操作BOM对象(重点)

BOM全称: Browser OBject Module 浏览器对象模型

8.1 浏览器介绍

JavaScript和浏览器的关系

JavaScript的诞生就是为了让它能在浏览器中运行

  • IE6-11
  • Chrome
  • Safari
  • Firefox

8.2对象

window (浏览器窗口 重点)

//内部高度
window.innerHeight 
864
//外部高度
window.outerHeight
850
//内部宽度
window.innerWidth
687
//外部宽度
window.outerWidth
1522

Navigator (封装浏览器信息)

window.navigator
Navigator {vendorSub: "", productSub: "20030107", vendor: "Google Inc.", maxTouchPoints: 0, hardwareConcurrency: 8,}

大多数时候不会使用navigator对象,因为会被人为修改!
不建议使用这些属性判断浏览器的信息来编写代码

screen (屏幕)

//屏幕宽高
screen.width
1536
screen.height
864

location (代表当前页面的URL信息 重点)

href: "https://www.bilibili.com/video/BV1JJ41177di?p=19" //路径
host: "www.bilibili.com" //主机
protocol: "https:" //协议
reload: ƒ reload() //重新加载刷新
location.assign("www.baidu.com") //设置新的地址

document (文档页面)

document.title
"【狂神说Java】JavaScript最新教程通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili"
  • 获取具体的文档树节点信息
document.getElementById("app")
<div id="app">​…​</div>
  • 获取cookie
document.cookie
"_uuid=4614887E-7BD8-17FE-96D1-2BFEFA5F7C1914532infoc; buvid3=7A28D6C8-C495-47A3-8388-DE0872EBE6C253933infoc; sid=54voewjf; DedeUserID=89016828; DedeUserID__ckMd5=a058ad8a4978d8d1; bili_jct=12b95fea3533cbc25ba8a334cf3ce675; PVID=1; CURRENT_FNVAL=16; rpdid=|(u|JJ)|kRJ~0J'ulm|J~uukm; CURRENT_QUALITY=32"

某些恶意的病毒网站会劫持cookie
在服务端设置 cookie: HttpOnly 防止cookie被劫持

history (浏览器的历史记录)

//回退
history.back
ƒ back() { [native code] }
//前进
history.forward
ƒ forward() { [native code] }

9. 操作DOM对象(重点)

DOM全称:Document Object Module 文档对象模型

核心: 浏览器是一个DOM树形结构

  • 更新: 更新DOM节点
    操作文本
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>操作文本</title>

</head>
<body>
<div id="div1"></div>
<script>
//一定要注意js代码的位置以及执行顺序
    var div1 = document.getElementById("div1")
	div1.textContent=("111");
    div1.innerText=("喵喵喵");
    div1.innerHTML=("<a href='#'>超链接<a/>");
</script>
</body>
</html>

操作js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>操作js</title>

</head>
<body>
<div id="div1">喵喵喵</div>
<script>

    var div1 = document.getElementById("div1");
    div1.style.fontSize="100px";
    div1.style.color="skyblue";
</script>
</body>
</html>
  • 遍历DOM节点: 得到DOM节点

  • 删除: 删除一个DOM节点

//删除节点需要先找到父节点,从父节点删
//毕竟自己无法把自己拎起来丢进垃圾桶
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>删除节点</title>

</head>
<body>
<div id="div1">喵喵喵</div>
<script>
    var father = div1.parentElement;
    var son =document.getElementById("div1")
    father.removeChild(son);
//也可以使用下标移除
	father.removeChild(father.children[0]);
</script>
</body>
</html>
  • 添加: 添加一个节点
appendChild();
	//新建一个标签
 	var pp = document.createElement('p');
    pp.id="p1";
    var p01 =document.getElementById("p1");
  • 获取DOM节点进行操作
//通过标签名获取元素
document.getElementsByTagName("div")
//通过ID获取元素
document.getElementById("app")
//通过class获取元素
document.getElementsByClassName("player-fullscreen-fix")

10. 操作表单(验证)

form,DOM树

  • 文本框 text
  • 下拉框 < select>
  • 单选框 radio
  • 多选框 checkbox
  • 隐藏域 hidden
  • 密码框 password

表单目的:提交信息

//表单取值
document.getElementById("name").value
"123"
//表单赋值
document.getElementById("name").value="111"
"111"
//单选框是否选中
document.getElementById("nan").checked=="checked"
false
//js代码改动单选框选中状态,赋值
document.getElementById("nan").checked="checked"

表单信息可以进行md5加密(具体自行百度学习)
前端md5加密(需要引用md5js文件)

onsubmit需要return

11.JQuery

Jquery库中存在大量的js函数

获取Jquery

  • 可以自己去下载Jquery文件导入
  • 可以去CDN使用在线文件引入
  • JQuery公式
$(selector).action()
$(选择器).动作()

事件(很简单,自学谢谢)

操作DOM元素

//获得值
$(选择器).html();
$(选择器).text();
//设置值
$(选择器).html("");
$(选择器).text("");

实用网站

  1. Layui
  2. ElementUI
  3. bootStrap
  4. AntDesign

前端小技巧

  1. 如何巩固JS (看JQuery源码,看游戏源码)
  2. 如何巩固HTML CSS (扒网站,download网站自己修改)

关键字

arguments
js自带的一个关键字 代表调用函数时传入的所有参数

rest
获取除了已经定义过的其他参数

let
SE6引入,定义局部变量推荐使用,解决局部作用域冲突问题

const
SE6引入用来定义常量

apply
.apply(对象名,数组),精确指向引用的对象

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值