栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaScript快速基础入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript快速基础入门

##前言
前端基础的博客主要分为HTML(结构层)、CSS(表现层)和JavaScript(行为层),本类博客主要用于记录博主的学习过程和分享学习经验,由于博主学识浅薄,经验不足,难免会出现错误,欢迎大家提出问题。

注:前端基础的文章参考于b站up主遇见狂神说的前端视频,文章中的源码笔记等资源放在百度网盘了,有需要的小伙伴可以自取啊
链接:https://pan.baidu.com/s/1NWIs14JmAvD3UUqNX01CYg
提取码:13tr
祝大家都学有所成,下面我们进入正题!

##JavaScript基础学习总结


JavaScript的一些核心内容都在这张思维导图中了,接下来我们来具体的了解一下JavaScript!

1、什么是JavaScript
  • JavaScript是一门世界上最流行的脚本语言

  • JavaScript 是属于 HTML 和 Web 的编程语言

  • ECMAScript可以理解为是JavaScript的一个标准

2、快速入门 2.1、引入JavaScript 1.内部标签


        
2.外部引入

(1)qjd.js

alert("hello,world");

(2)html



3.helloworld


    
    Title



        


    
    

    
    








2.2、基本语法入门



    
    Title

    
    





2.3、数据类型

数值,文本,图形,音频,视频

变量

var a=1;
//不能以数字开头( var 5a=1;)

number

js不区分小数和整数

123      //整数
123.1   //浮点数
1.1e2   //科学技术法
-99     //负数
NaN     //noy a number
Infinity//表示无限大

字符串

‘abc’ “abc”

布尔值

true flase

逻辑运算

&&   两个都为真,结果为真
    
||   一个为真,结果为真
    
!    真即假,假即真

比较运算符

=          赋值
==         等于(类型不一样,值一样,也会判断为true)
===        绝对等于(类型一样,值一样,结果为true)
(这里与java不一样)

注:

  • NaN与所有的数值都不相等,包括自己(NaN===NaN,结果为false)
  • 只能通过isNaN(NaN)来判断这个数是否是NaN

浮点数问题:

console.log( (1/3)===(1-2/3))

结果为false,我们要尽量避免用浮点数进行运算,存在精度问题

a=Math.abs(1/3-(1-2/3))<0.0000000001;
console.log(a);

结果为true

null和undefined

  • null是空的意思
  • undefined是未定义

数组

Java数组中的数值必须是相同类型的对象,JS中不需要这样

   //为了保证数组的可读性尽量使用[]的方式
        var arr = [1,2,3,4,5,'hello',null,true];

        new Array(1,2,3,4,5,'hello',null,true);

取数组下标如果越界就会undefined

对象

对象是大括号,数组是中括号

每个属性之间用逗号隔开,最后一个不需要添加

//Person person  = new Person(1,2,3,4,5);
var person = {
    name:"ikun",
    age:3,
    tages:['html','css','javascript']
}

在浏览器取对象的值

2.4、严格检查格式



    
    Title

    







3、数据类型 3.1、字符串

1.正常的字符串我们使用单引号,或者双引号包裹

2.注意转移字符

'
n
t
u4e2d    //u#### unicode字符 
x41      //ASCLL字符

3.多行字符串编写

//esc键下边的那个键
var msg = `
 hello
 world
 你好        
`

4.模板字符串

let name = "kunkun";
let age = 3;
let msg = `我是${name}`

5.字符串长度

console.log(name.length);

6.字符串的可变性

不可变

7.大小写转换

 //注意,这里是方法,不是属性了
        name.toUpperCase();
        name.toLowerCase();

其他方法

方法描述
charAt()返回指定索引位置的字符
charCodeAt()返回指定索引位置字符的 Unicode 值
concat()连接两个或多个字符串,返回连接后的字符串
fromCharCode()将 Unicode 转换为字符串
indexOf()返回字符串中检索指定字符第一次出现的位置
lastIndexOf()返回字符串中检索指定字符最后一次出现的位置
localeCompare()用本地特定的顺序来比较两个字符串
match()找到一个或多个正则表达式的匹配
replace()替换与正则表达式匹配的子串
search()检索与正则表达式相匹配的值
slice()提取字符串的片断,并在新的字符串中返回被提取的部分
split()把字符串分割为子字符串数组
substr()从起始索引号提取字符串中指定数目的字符
substring()提取字符串中两个指定的索引号之间的字符(包头不包尾)
toLocaleLowerCase()根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLocaleUpperCase()根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLowerCase()把字符串转换为小写
toString()返回字符串对象值
toUpperCase()把字符串转换为大写
trim()移除字符串首尾空白
valueOf()返回某个字符串对象的原始值
3.2、数组

Array可以包含任意数据类型

var arr=[1,2,3,4,5];
//通过下标取值和赋值
arr[0]
arr[3]=9

1.长度

arr.length;

注:加入给arr.length赋值,数组大小就会发生变化(过小元素丢失,过大加空)

2.indexOf,通过元素获得下标索引

arr.indexOf(3);
2

字符串的"1"和数字1是不同的

3.slice()

截取数组的一部分返回一个新数组

var arr=[1,2,3,4,5];
arr.slice(1,3)
//类似于subString,包头不包尾
2,3

4.push pop

  • push: 压入到尾部
  • pop:尾部的一个元素弹出


5.unshift() shift()

  • unshift(): 压入到头部
  • shift(): 头部的一个元素弹出

    6.排序sort()


7.元素反转reverse()

8.拼接concat()

注:contact()并没有修改数组,只是会返回一个新的数组

9.连接符 join

打印拼接数组,使用特定的字符串连接

10.多维数组

3.3、对象

若干个键值对

//定义了一个person对象他有四个属性
var person = {
    name : "qq",
    age : 18,
    emali : "cjsioevcmsp",
    score : 60
    
}

js中的对象,{…}表示一个对象,键值对描述属性xxx:xxxx,多个属性之间用逗号隔开,最后一个不用逗号

js中所有的键都是字符串,值是任意对象

1.对象赋值

2.使用一个不存在的对象属性不会报错 undefined

3.动态的删减属性,通过delete删除对象的属性

4.动态的添加,直接给新的属性添加值

5.判断属性值是否在这个对象中(toString是继承的)

6.判断一个属性是否是自身所拥有的

3.4、流程控制

if判断

let age = 5;
if(age>3){
    alert("haha~");
}else{
    alert("kuwa~")
}

循环,注意避免死循环

while

while (age<10){
    age = age+1;
    console.log(age);
}

for

for (let i = 0; i <10 ; i++) {
    console.log(i);
}

数组遍历

var list = [1,2,43,4,,5,6,76,7];
list.forEach(function (value){
    console.log(value);
})
3.5、Map和Set集合
  • ES6的新特性

Map

    'use strict';
        //统计学生的成绩和学生的名字
        // var names = ['tom','jack','rose'];
        // var score = [100,99,88];

        var map = new Map([['tom',100],['jack',99],['rose',88]]);
        let tom = map.get('tom');//通过key获得value
        map.set('rock',66);//添加新的键值对
        map.delete("rock");//删除
        console.log(tom)

Set:无序不重复的集合

//set 可以去重
var set = new Set([2,3,,4,45,5,6,3,2]);
set.add(9);
set.delete(2);
console.log(set.has(3));//是否包含
3.6、 iterator

使用iterator来遍历迭代我们的Map,Set

  • ES6的新特性

遍历数组

'use strict';
var arr = [3,4,5];
// in 打印下标
for(var x in arr){
    console.log(x);
}
// of 打印值
for(var x of arr){
    console.log(x);
}

遍历map

var map = new Map([['tom',100],['jack',99],['rose',88]]);
for(let x of map){
    console.log(x);
}

遍历set

var set = new Set([2,3,,4,45,5,6,3,2]);
for(let x of set){
    console.log(x);
}
4、函数

方法:对象(属性,方法)

函数:

4.1、定义函数
  • 定义方式一

绝对值函数

function abs(x){
    if(x<=0){
        return -x;
    }else{
        return x;
    }
}

一旦执行return代表函数结束,返回结果

如果没有执行return,函数执行完也会返回结果(undefined)

  • 定义方式二

    var abs = function (x){
        if(x<=0){
            return -x;
        }else{
            return x;
        }
    }
    

    function (x){…}这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数

4.2、调用函数
abs(10)        //10
abs(-10)       //10

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

假设不存在参数,如何规避?

var abs = function (x){
    //手动抛出异常来判断
    if(typeof x !== 'number'){
        throw 'Not a Number';
    }
    if(x<=0){
        return -x;
    }else{
        return x;
    }
}

arguments是JS免费赠送的关键词,利用他我们可以得到所有的参数

代表所有传递进来的参数是一个数组

function abs(x){
    console.log("x=>"+x);
    for (let i = 0; i 
        console.log(arguments[i]);
    }
    if(x<=0){
        return -x;
    }else{
        return x;
    }
}


问题:

arguments会包含所有的参数,如何排除已有的参数?

rest

以前

function ac(a,b){
    console.log("a=>"+a);
    console.log("b=>"+b);
    if(arguments.length>2){
        for (let i = 2; i 

现在

function ac(a,b,...rest){
    console.log("a=>"+a);
    console.log("b=>"+b);
    console.log(rest);
}


rest参数只能写在最后面,必须用…标识

4.3、变量的作用域

在js中,var定义变量实际是有作用域的

  • 假设在函数体中声明,则在函数体外不能使用 (如果要想使用需要使用闭包)
function qjd(){
    var x = 1;
    x = x+1;
}

x = x+2;//Uncaught ReferenceError: x is not defined
  • 如果两个函数使用了相同的变量名,只要造函数内部就不冲突
function qjd(){
    var x = 1;
    x = x+1;
}
function qjd2(){
    var x = 1;
    x = x+1;
}
  • 函数嵌套使用的话,内部函数可以访问外部函数的成员,反之则不行

  • 假设内部函数变量与外部函数变量重名

    function qjd(){
        var x = 1;
    function qjd2(){
        var x = 2;
        console.log('inner'+x);//outer1
    }
        console.log('outer'+x);//inner2
        qjd2();
    
    }
    qjd();
    

假设在js中函数查找变量从自身函数开始,由内向外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量

  • 所有的变量定义放在代码头部,便于理解与维护

  • 全局函数

  • 全局对象window

    var x = 1;
    alert(x);
    //alert()这个函数本身也是一个window变量
    alert(window.x);
    //默认所有的全局变量都会自动化绑定在window对象下
    

js实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域没有找到,就会报错

规范:降低全局命名冲突问题

//唯一全局变量
var Q = {};
//定义全局变量
Q.name = 'qjd';
Q.add = function (a,b){
    return a+b;
}
  • 局部作用域let(建议使用let去定义局部变量)
  • 常量const
const PI = '3.14';
4.4、方法
  • 定义方法

    方法就是把函数放在对象里面,对象里面只有两个东西:属性和方法

    var qiao = {
        name : 'qid',
        birth : 2001,
        //方法
        age:function () {
            let year = new Date().getFullYear();
            return year - this.birth;
        }
    }
    //属性
    qiao.name
    //方法,一定要带()
    qjd.age()
    
  • 拆开上边的代码

    function getAge() {
        let year = new Date().getFullYear();
        return year - this.birth;
    }
    
    var qiao = {
        name : 'qid',
        birth : 2001,
        age:getAge
    }
    // qiao.age()
    // 21
    
    // getAge()
    // NaN     window对象
    

    this是无法指向的,是默认指向调用他的那个函数

  • apply

    在js中可以控制this指向

    //this指向了qiao这个对象,参数为空
    getAge().apply(qiao,[]);
    
    // getAge.apply(qiao,[]);
    // 21
    
5、对象

标准对象:

typeof 123
'number'
typeof 'dgd'
'string'
typeof true
'boolean'
typeof NaN
'number'
typeof []
'object'
typeof {}
'object'
typeof Math.abs
'function'
5.1、Date

基本使用

var date = new Date();//Sat Jul 02 2022 20:34:01 GMT+0800 (GMT+08:00)
date.getFullYear();//年    2022
date.getMonth();//月      注意这里0到11代表月份
date.getDate();//日
date.getDay()//星期几
date.getHours();//时
date.getMinutes();//分
date.getSeconds();//秒
//全世界统一时间从1970.1.1 0:00:00 开始算的毫秒数
date.getTime();//时间戳    1656765442368
//时间戳转为时间
console.log(new Date(1656765442368))
// VM261:1 Sat Jul 02 2022 20:37:22 GMT+0800 (GMT+08:00)

转换

date.toLocaleString()
'2022/7/2 20:37:22'
date.toGMTString()
'Sat, 02 Jul 2022 12:37:22 GMT'
date.toDateString()
'Sat Jul 02 2022'
5.2、JSON

JSON是什么?

  • JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。
  • 它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在js中一切皆为对象,任何js支持的类型都可以用JSON来表示:

  • 对象都用{}
  • 数组都用[]
  • 所有的键值对都用key:value

JSON和JS对象的转化

例子


测试

console.log(user)
VM218:1 {name: 'qiao', age: 15, sex: '男'}age: 15name: "qiao"sex: "男"[[Prototype]]: Object
undefined
console.log(jsUser)
VM266:1 {"name":"qiao","age":15,"sex":"男"}




console.log(obj)
{name: 'qiao', age: 15, sex: '男'}

json与js对象的区别

var js = {a:'helloa', b:'hellob'}
var json = '{'a':'helloa','b':'hellob'}'
6、面向对象编程 6.1、什么是面向对象

js,java,c#…面向对象;js有一些区别

类:模板 原型对象 原型链

对象:具体的实例

JavaScript:

原型:


6.2、class继承

1.定义一个类,属性,方法

//es6之后的方法,重点记这个
//定义一个学生的类
class student{
    constructor(name) {
        this.name = name;
    }
    hello(){
        alert('hello')
    }
}


     var xiaoming = new student("xiaoming");
     var xiaoming3 = new student("xiaoming3");

     xiaoming.hello()

2.继承

    class student{
        constructor(name) {
            this.name = name;
        }
        hello(){
            alert('hello')
        }
    }

    class pupil extends student{
        constructor(name,grade) {
            super(name);
            this.grade = grade;
        }
        myGrade(){
            alert('pupil')
        }
    }


    var xiaoming = new student("xiaoming");
    var xiaoming3 = new pupil("xiaoming3",1);




本质:查看对象原型

  • 原型链 :原型链:通过隐式原型把一些构造函数层层的串起来,因为所有的对象都是继承自Object。

原型链: https://www.cnblogs.com/liumcb/p/13667117.html

7.操作BOM对象(重点)

浏览器介绍

JS和浏览器关系?

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

BOM:浏览器对象模型

内核:

  • IE6~11
  • Chrom
  • Safari
  • FireFox

第三方:

  • QQ浏览器
  • 360浏览器
  • 搜狗浏览器

window

window代表浏览器窗口

window.innerHeight
722
window.innerWidth
555
window.outerHeight
824
window.outerWidth
1536
//可以调整浏览器窗口进行测试

Navigator

Navigator,封装了浏览器的信息

navigator.appName
'Netscape'
navigator.appVersion
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
navigator.platform
'Win32'

大多数时候,我们不会navigator对象,因为会被人为修改

screen

screen代表屏幕尺寸

screen.width
1536
screen.height
864

location

location代表当前页面的URL信息

doucument

doucument代表当前的页面,HTML,DOM文档树

document.title
'百度一下,你就知道'

获取集体的文档树节点



Java
JavaSE
JavaEE

获取cookie

document.cookie

劫持cookie原理

假设登录淘宝



服务器端可以设置cookie:httpOnly防止读取cookie信息

history

history代表浏览的历史记录

后退到上一个网页

history.back()

前进到下一个网页

history.forward()
8、操作DOM对象(重点)

DOM:文档对象模型

DOM树形结构

核心

浏览器网页就是一个DOM树形结构

  • 更新:更新DOM节点
  • 遍历DOM节点:得到DOM节点
  • 删除:删除一个DOM节点
  • 添加:添加一个新的节点

要操作一个新的DOM节点,就必须要先获得这个DOM节点

获得DOM节点



    
    Title




标题一

p1

p2

这是原生代码,之后尽量使用jQuery

更新节点










操作文本

  • id1.innerText=‘123’ 修改文本的值
  • id1.innerHTML=‘456’ 可以解析html标签

操作css

  • id1.style.color = ‘red’ //属性用字符串包裹
  • id1.style.fontSize = ‘50px’ // - 转 驼峰命名问题
  • id1.style.padding = ‘2em’

删除节点

删除节点步骤:

  1. 先获取父节点
  2. 再通过父节点删除自己



    
    Title




    标题一
    

p1

p2

  • 注意:删除多个节点的时候,children是时刻在变化的,删除的时候一定要注意

插入节点

我们获得了某个DOM节点,假设这个DOM节点是空的,我们通过innerHTML就可以增加一个元素了,但是如果这个DOM节点已经存在元素了,我们就不能这么做了,会产生覆盖

追加


JavaScript

JavaSE

JavaEE

JavaME

创建一个新的标签实现插入

//通过js创建一个新的节点
// 

HelloQJD

var newP = document.createElement('p');//创建一个p标签 newP.id = 'newP'; newP.innerText = 'HelloQJD'; list.appendChild(newP); //创建一个标签节点,通过这个属性可以设置任意的值 //

提交表单,MD5加密密码,表单优化



    
    Title

    



用户名:

密码:

结果:密码被隐藏

10、jQuery

JavaScript

jQuery库,里面存在大量的JavaScript函数

公式:$(selector).action()

获取jQuery

引入在线的cdn




    
    Title
    
    
    
    
    





使用jQuery




    
    Title

    







 点击







选择器




    
    Title







文档工具站:https://jquery.cuishifeng.cn/

事件

鼠标事件,键盘事件,其他事件

鼠标事件:

获取鼠标当前的一个坐标:




    
    Title
    

    





mouse:
在这里移动鼠标

操作DOM

  • JavaScript
  • Python

节点文本操作:

 $('#py').text();        //获得值
'Python'
   $('#py').text("c++"); //设置值
jQuery.fn.init [li#py]
   $('#py').text();
'c++'


$('#test-ul').html()   //获得值
$('#test-ul').html('123456') //设置值

css操作:

 $('.js').css({ "color": "#ff0011", "background": "blue" })//键值对

元素的显示和隐藏:

本质是css中 display = none;

$('.js').show()//显示

$('.js').hide()//隐藏

其他

学习技巧

  • 巩固js(看jQuery源码,看游戏源码)
  • 巩固HTML,CSS(扒网站,对应删减看效果)

好啦,JavaScript基础的学习到这里就结束了,这里推荐一个项目巩固JavaScriptJavaScript基础,希望大家都有所收获!
JavaScript30天30个练习

https://github.com/wesbos/JavaScript30

大家觉得文章还可以的话可以帮忙点个推荐啊

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号