JavaScript整合笔记

1.1、JavaScript介绍

什么是JavaScript

JavaScript是一门世界上最流行的脚本语言。

ECMAScript

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

1.2、JavaScript使用

引入JavaScript

1.内部标签

2.外部引入

js文件

 alert('hello,world');

1.3、基本语法入门



Title

浏览器必备调试须知

1.4、数据类型(入门)

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

变量

变量不能以数字开头和以下符号开头,$和_可以

 number

js不区分小数和整数,number

1  //整数
1.5 //浮点数
1.5e5 //科学计数法
-99 //负数
NaN  // not a number

字符串

'666 '  "666"

布尔值

true 
false

逻辑运算

&& //与,两个都为真,结果为真 
|| //或,一个为真,结果为真 
! //非,真即假,假即真

比较运算符

=    赋值符号
==   等于   (类型不一样,值一样,也会判断为true)
===  绝对等于 (类型一样,值一样,结果为true)

这是一个JS的缺陷,坚持不要使用 == 比较

通过isnan(nan) 来判断这个数是否是nan

浮点数问题

尽量避免使用浮点数进行运算,存在精度问题!

 null(空指针)和undefined

null 空

undefined 未定义

//保证代码的可读性,尽量使用 []
var arr = [1,2,4,5,6,'hello',true,null] 
new Array(1,2,3,4,5,6,'hello');

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

 对象

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

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

//java的写法:bubbles bubbles = new bubbles
var bubbles = { //javascript的写法name: "彬哥",age: 18,tags: ['js','ssm','mysql','...']}

1.5、严格检查模式strict



严格检查模式strict



1.6、数据类型

字符串

正常字符串我们使用单引号' ',或者双引号" "包裹

注意转义字符\

\'
\n
\t
\u4e2d   Unicode字符
\x41  Ascll字符

多行字符串编写

var msg = `hello
world
bubbles`b

模板字符串

let name = '彬哥'; 
let age = 3; 
let msg = `你好,${name}`

 字符串长度

console.log(src.length)

 字符串的可变性,不可变

var bubbles = 'you'
undefined
bubbles[0] = 1
1
console.log(bubbles)
you

大小写转换

//大写
console.log(bubbles.toUpperCase())
//小写
console.log(bubbles.toLowerCase()))

获取指定的下标

console.log(bubbles.indexOf('e'))

截取

console.log(bubbles.substring(1)) //从第一个字符串截取到最后一个字符串
console.log(bubbles.substring(1,3)) //[1,3)

数组

Array可以包含任意的数据类型

var arr= [1,2,3,4,5,6]

长度

arr.length //长度

注意:加入给arr.length赋值,数组大小就会发生变化~,如果赋值过小,元素就会丢失。

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

arr.indexOf(2) 
1

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

slice() 截取Array的一部分,返回一个新数组,类似于String中subString

arr.slice(2,3)

push()、pop()

push:压入到尾部

arr
(5) [1, 2, 3, 4, 5]
arr.push('a','b') //压入到尾部
7
arr
(7) [1, 2, 3, 4, 5, 'a', 'b']

pop:弹出尾部的一个元素

arr.pop //弹出尾部的一个元素

unshift(),shift()头部

unshift: 压入到头部

var arr = [1,2,3,4,5,6]
undefined
arr.unshift('a','b')  //压入到头部
8
arr
(8) ['a', 'b', 1, 2, 3, 4, 5, 6]

shift: 弹出头部的一个元素

arr.shift() //弹出头部一个元素

排序sort

arr
(4) ['b', 'c', 'd', 'a']
arr.sort() //排序
(4) ['a', 'b', 'c', 'd']

元素反转reverse

arr.sort()
(4) ['a', 'b', 'c', 'd']
arr.reverse() //元素反转
(4) ['d', 'c', 'b', 'a']

concat

(4) ['d', 'c', 'b', 'a']
arr.concat(1,2,3)
(7) ['d', 'c', 'b', 'a', 1, 2, 3]
arr
(4) ['d', 'c', 'b', 'a']

注意:concat并没有修改数组,只是会返回一个新的数组

连接符join

打印拼接

var bubbles = [1,2,3,4,5]
undefined
bubbles.join('-')
'1-2-3-4-5'

多维数组

var arr = [[1,2],[3,4],[5,6]]
undefined
arr
(3) [Array(2), Array(2), Array(2)]
0: (2) [1, 2]
1: (2) [3, 4]
2: (2) [5, 6]
length: 3
arr[1][1]
4

填充fill

arr.fill(1)

总结

数组:存储数据(如何存、取,方法都可以自己实现)

对象

若干个键值对

var 对象名 = {属性名: 属性值,属性名: 属性值,属性名: 属性值
}
//定义了一个person对象,它有四个属性!var score = {name: "bubbles",age: 18,email:'2019882328@qq.com',score: 0
}

js中的对象,{.....}表示一个对象,键值对描述属性xxxx;xxxx,多个属性之间使用逗号隔开,最后一个属性不加逗号!

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

对象赋值

score.name = '彬哥' 
'彬哥' 
score.name 
'彬哥'

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

score.haha //值是瞎写的,不存在 
undefined

动态的删减属性

delete score.name 
true

动态的添加,直接给新的属性添加值即可

score.bubbles = '彬哥' //自定义 
'彬哥'

判断属性值是否在这个对象中! xxx in xxx!

'age' in score 
true 
'toString' in score 
true

判断一个属性是否是这个对象自身拥有的hasOwnProperty

score.hasOwnProperty('age')
true //有
score.hasOwnProperty('ssm')
false //没有

流程控制

if判断

var score = 3if (score>3){  //判断1alert('hehe')}else if (score<5){ //判断2alert('wawu~')}else{ //否则alert('wawu~')}

while循环,避免程序死循环

var score = 3
while (score<100){score = score+1console.log(score)
}

dowhile循环,避免程序死循环

var score = 3
do{score = score+1console.log(score)
}while(score<100)

for循环

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

forEach循环 5.1

var bubbles =[1,2,45,66,3,7,7,9]
bubbles.forEach(function (value){console.log(value)})

for...in

var bubbles =[1,2,45,66,3,7,7,9]
//函数for(var num in bubbles){if (bubbles.hasOwnProperty(num)){console.log('存在')console.log(bubbles[num])}

Map和Set

ES6新特性

Map

//ES6,Map
//学生的姓名、成绩
var map = new Map([['xiaobin',100],['bubbles',90],['xiao',60]]);
var name = map.get('xiaobin')
map.set('admin',123456)  //添加和修改
map.delete('xiao')//删除
console.log(name)

Set

去除重复的值

//Set,去除重复的值
var set = new Set([1,2,1,1,3]);console.log(set)

var set = new Set([1,2,1,1,3]);
set.add(2) //添加
set.delete(1) //删除
console.log(set.has(3)) //是否包含某个元素


iterator迭代

遍历数组

var a = [1,2,3]
for (let x of a) {console.log(x)
}

遍历Map

var map = new Map([['bubbles',100],['小明',90],['小美',89]]);
for(let you of map){console.log(you)
}

遍历Set

//遍历Set
var set = new Set([1,2,3,4,5,6]);
for (let et of set){console.log(et)
}

1.7、函数

定义函数

定义方式一

绝对值函数

function you(x){if(x>=0){return x;  }else{return  -x;}
}

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

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

定义方式二

var you  =function(x){if(x>=0){return x;  }else{return  -x;}
}

function(x){......}这是一个匿名函数。

但是可以把结果赋值给you(自定义),通过you(自定义)就可以调用函数!

方式一和方式二等价!

调用函数

abs(10) //10
abs(-10) //10

参数问题:javascript可以传任意个参数,也可以不传递参数~

参数进来是否存在的问题?

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

function you(x){if(typeof x!=='number'){ //手动添加异常throw 'Not a Number'}if(x>=0){return x;  }else{return  -x;}
}

arguments

arguments是javascript免费赠送的关键字;

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

var abs = function(x){console.log("x=>"+x);for (var i = 0; i=0){return x;}else{return -x;}
}

问题:arguments包含所有的参数,我们有时候想使用多余的参数来进行附加操作。

需要排除已有的参数~

rest

以前

if(arguments.length>2){for (var i = 2;i

ES6引入的新特性,获取除了已经定义的参数之外的所有参数~....

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

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

变量的作用域

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

假设在函数体中声明,则在函数体外不可以使用~

function f() {var x = 1;x= x+1;
}
x= x+2;

如果两个函数使用了相同的变量名

function f() {var x = 1;x= x+1;
}
function f2() {var x = 'a';x= x+1;
}

内部函数可以访问外部函数的成员,反之则不行

function f() {var x = 1;
}
//内部函数可以访问外部函数的成员,反之则不行
function f2() {var y =  x +1;
}
var z = y+1; //Uncaught ReferenceError: y is not defined

假设,内部函数变量和外部函数的变量,重名!

function f() {var x = 1;//内部函数可以访问外部函数的成员,反之则不行function f2() {var x = 'a';console.log('inner' + x) //outer1}console.log('outer' + x) //inneraf2()
}
f() //调用

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

提升变量的作用域

function f(){var x = 'x'+y;consloe.log(x)var y = 'y';
}

 说明:javascript执行引擎,自动提升了y(自定义)的声明,但是不会提升变量y(自定义)的赋值;

function fa2(){var y;var x = 'x'+1console.log(x)y =  'y'
}

这个是在javaScript建立之初就存在的特性。养成规范:所有的变量定义都放在函数的头部,不要乱放,便于代码维护;

function fa2(){var x = 1y = x+1z,i,a;//undefined
}

全局函数

var  x =1
function f() {console.log(x)
}
f()
console.log(x)

全局对象window

var x = 'xxx';
alert(x);
alert(window.x) //默认所有的全局变量,都会自动绑定在window对象下。

alert这个函数本身也是一个window 变量;

var x = 'xxx';
window.alert(x)
var old_alert = window.alert;
window.alert = function (){};
//发现alert失效了
window.alert(123)//恢复
window.alert = old_alert;
window.alert(456)

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

规范

由于我们所有的全局变量都会绑定到我们的window上。如果不同的js文件,使用了相同的全局变量,冲突~ >如何能够减少冲突?

//唯一全局变量
var bubbles = {}//定义全局变量bubbles.name = '彬哥'bubbles.add = function (a,b){return a+b;}

把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题~

局部作用域let

function f() {for (var i = 0; i <100 ; i++) {console.log(i)}console.log(i+1) // i 出了这个作用域还能使用
}

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

function f() {for (let i = 0; i <100 ; i++) {console.log(i)}console.log(i+1) // i 出了这个作用域还能使用}

 建议大家都是用let去定义局部作用域的变量;

常量 const

在ES6之间,怎么定义常量;只有用全部大写字母命名的变量就是常量,建议不要修改这样的值

var  PI = '3.14'
console.log(PI)
PI = 123  //修改变量
console.log(PI)

在ES6引入了常量关键字const

const PI  = '3.14' //只读变量,不能修改
onsole.log(PI)
PI = 123 //修改变量
console.log(PI)

方法

定义方法

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

var bubbles  = {name : '彬哥',bitrh: 2003, //出生日期//方法age: function () {//今年 - 出生的年var on = new Date().getFullYear();return on-this.bitrh}
}

 this代表什么?拆开代码试试

function x () {//今年 - 出生的年var on = new Date().getFullYear();return on-this.bitrh
}
'use strict'//使用严格检查模式
var bubbles  = {name : '彬哥',bitrh: 2003, //出生日期//方法age: x}

apply

在js中可以控制this指向!

function x () {//今年 - 出生的年var on = new Date().getFullYear();return on-this.bitrh
}
'use strict'//使用严格检查模式
var bubbles  = {name : 'bubbles',bitrh: 2020, //出生日期//方法age: x}
var  binge  = {name : '彬哥',bitrh: 2003, //出生日期//方法age: x
}
x.apply(bubbles,[]) //this,指向对象参数为null

1.8、内部对象

标准对象

typeof 123
'number'
typeof '123'
'string'
typeof true
'boolean'
typeof NaN
'number'
typeof []
'object'
typeof {}
'object'
typeof Math.abs
'function'
typeof undefined
'undefined'

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(1650866500836))//通过时间戳,获取当前时间

转换

date.toLocaleString()
'2022/4/25 14:01:40'
date.toGMTString()
'Mon, 25 Apr 2022 06:01:40 GMT'

JSON

json是什么

早期,所有数据传输习惯使用XML文件!

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

简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

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

格式

对象都用{}

数组都用[]

所有键值对都是用key:value

var user = { //对象name :'binge',age:18,sex:'男'
}
//对象转化为json字符串,{name: 'binge', age: 18, sex: '男'}
var jsonuser = JSON.stringify(user)

var user = { //对象name :'binge',age:18,sex:'男'
}
//json字符串转化为对象参数为json字符串
var obj = JSON.parse('{"name":"binge","age":18,"sex":"男"}')

JSON和JS对象的区别

var obj = {a: 'hello',b:'hello'}
var json = '{"a":"hello","b":"hello"}'

1.9、面向对象

原型对象

javascript..java.....面向对象,javascript有些区别!

类:模板 原型对象

对象:具体的实例

原型继承

var Student  ={name:'xiaoming',age:18,run:function (){console.log(this.name+'在学习...')}
};
var bubbles = {name: '彬哥'
};
//泡泡的原型指向鸟(继承)
bubbles.__proto__ = Student;

function f(name) {this.name = name;
}
//给f新增一个方法
f.prototype.hello = function (){alert('hello')
};

class继承

class关键字,是在ES6引入的

定义一个类,属性、方法

//ES6
class Class {//构造器constructor(name) {this.name = name;}hello(){alert('hello')}
}
var c1 = new Class('bubbles');
var c2 = new Class('彬哥');

继承

本质:查看对象原型

原型链

 __proto__

2.0、BOM对象

浏览器介绍

JavaScript和浏览器关系?

JavaScript诞生就是为了能够让他在浏览器运行!

BOM:浏览器对象模型

  1. IE6~11
  2. Chrome
  3. Safari
  4. FireFox

三方

  1. QQ浏览器
  2. 360浏览器

window

window代表浏览器窗口

window.alert('我是神') //弹窗显示
windew.innerHeight    //内高
windew.innerwidth  //内宽
window.outerHeight  //外高
window.outerwidth //外宽

Navigator(不建议使用)

Navigator封装了浏览器的信息

navigator.appName //名字
'Netscape' //网景浏览器
navigator.appVersion  //当前浏览器的版本
'5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36 Edg/100.0.1185.50'
navigator.userAgent //用户代理
'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36 Edg/100.0.1185.50'
navigator.platform //站台
'Win32'
...

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

不建议使用这些属性来判断和编写代码

screen

代表屏幕尺寸

screen.width //屏幕宽度
145px
screen.height //屏幕高度
376px

location

location代表当前页面的URL信息

host: "www.baidu.com"
href: "https://www.baidu.com/s?wd=q%27q&ie=utf-8&tn=54093922_22_hao_pg"
protocol: "https:"
reload: ƒ reload() //刷新网页//设置新的地址
location.assign('https://blog.csdn.net/BubblesMusic?type=blog')

document

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

document.title
'百度一下,你就知道'
document.title = '彬哥一下,你就知道' //改名
'彬哥一下,你就知道'

获取具体文档树节点

Java
JavaScript

获取cookie

document.cookie

劫持cookie原理

淘宝网 - 淘!我喜欢


恶意人员:获取你的cookie上传到的服务器,例如你打开两大购物网站淘宝和天猫,
通过手机号登录淘宝,天猫也自动登录了 

服务器端可以设置cookie: httpOnly

history(不建议使用)

history,代表浏览器的历史记录

history.forward() //前进 
history.back()  //后退

2.1、操作DOM对象(重点)

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

  1. 更新:更新DOM节点
  2. 遍历DOM节点:得到DOM节点
  3. 删除:删除一个DOM节点
  4. 添加:添加一个新的节点

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

获取DOM节点

 

DOM

我是帅哥

p1

p2

这是原生代码,之后都是用jQuery

更新节点

操作文本

au.innerText = '456' //修改文本的值
au.innerHTML = '34323' //可以解析HTML文本标签

注意:会覆盖原先的数据

操作CSS

au.style.color = 'rgba(255,173,173,0.5)'
au.style.fontStyle = '20px'
au.style.padding = '2em'
...

 删除节点

删除节点步骤:先获取父节点,在通过父节点删除自己

我是帅哥

p2

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

插入DOM节点

我们获得了某个Dom节点,假设这个DOM节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个DOM

追加

javascript

javase

javaee

javame

you.appendChild(js) //追加放置底部

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



Title

javascript

javase

javaee

javame



Title

javascript

javase

javaee

javame

 

insertBefore

 

javascript

javase

javaee

javame

2.2、操作表单(验证)

表单是什么 form DOM 树

  1. 文本框 text
  2. 下拉框 性别

    MD5

    工具类

    
    

    使用

    //MD5算法
    password.value = md5(password.value);

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

    
    
    提交表单
    
    
    
    

    账号

    密码

    2.3、jQuery

    初始JQuery

    JavaScript

    JQuery库,里面存在大量的javascript函数

    在线CDN JQuery(百度)

     获取jquery,测试代码

    
    
    初始JQuery
    
    点我试试
    
    
    

    JQuery选择器

    js和jquery的对比

    //原生js
    //标签选择器
    document.getElementsByTagName()
    //类选择器
    document.getElementsByClassName()
    //id选择器
    document.getElementById()//jquery
    $('id').click() //标签选择器
    $('.class').click() //类选择器
    $('#id').click() //id选择器

    JQuery事件

    
    
    jQuery事件
    
    
    mouse:在这里移动鼠标试试
    
    
    

    JQuery操作DOM元素

    操作DOM

    节点文本操作

     $('#test-ui li[name=python]').text(); //获得值
    'javascript'$('#test-ui li[name=python]').text('设置值'); //设置值$('#test-ui').html(); //获得值$('#test-ui').html('设置值'); //设置值

    css操作

    $('#test-ui li[name=python]').css('color','red') //文字颜色
    $('#test-ui li[name=python]').css('background','red') //背景颜色

    元素的显示和隐藏:本质display : none;

    $('#test-ui li[name=python]').show() //显示
    $('#test-ui li[name=python]').hide() //隐藏


    本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部