邵邵。

导航

JavaScript

简介

JavaScript简称JS,与Java没有任何关系

JavaScript是一门编程语言

不过JavaScript逻辑非常不严谨

JavaScript很容易学习

简单使用

HTML引入JavaScript方式

  • script标签内部直接编写(不推荐使用)
  • link标签src属性引入外部JS文件

注释语法
任何一门编程语言都需先了解其注释语法
代码注释为代码之母
HTML:<!--这是HTML注释-->
CSS:/注释/
JS://单行注释、/*多行注释*/

结束符号
分号作为结束符号(;)但是不写问题也不大

变量与常量

在js中声明变量需要关键字声明:
    老版本:var(声明的是全局变量)
    新版本:let(可以声明局部变量)

在js中声明常量需要使用关键字
    const    //这是声明一个真正意义上的常量

如何创建变量
    var name = 'll'
    let name = 'pp'

如何创建常量
    const pi = 3.14

PS:可以编写js代码的地方
    1、pycharm提供的js文件
    2、浏览器提供的编程环境

注:在pycharm中使用let关键字命名的时候如果飘红,说明pycharm没有使用 6+ 版本,更改之后就可以了

基本数据类型

Python:
    int、float、str、list、dict、bool、tuple、set
JS:
    number数值类型、string字符串、boolean布尔值、undefined、object对象(列表,字典等)

JS是动态类型语言
    声明一个变量之后可以更改指向的数据类型

number类型

//数值类型:包含了整形与浮点型
声明之后就可以进行赋值操作
let n1 = 11
var n2 = 11.11

类型转换:
    parseInt('123')  转换字符串中的数字部分
    parseInt('aa')  报错
        //NAN:Not A Number
        //NAN:数值类型,表示的意思不是一个数字
    parseGloat('11.11')  可以转换全部

查看数据类型:
    typeof()

string类型+内置方法

定义字符类型方式:
    let name = 'kk'
    var name = 'kk'

定义多行字符串:
    let s1 = `kk`  //称之为模板语法

内置方法
.length()    返回长度
.trim()    移除空白
.trimLeft    移除左侧空白
.trimRigth     移除右侧
.charAt(n)    返回第n个字符
.concat(value,...)  拼接  //推荐使用 +
.indexOF(substring,start)  子序列位置//返回整体所在的范围
.slice(start,end)    切片
.toLowerCase()    转大写
.toUpperCase()    转小写
.split(selimiter,limit)    分割//返回数组(列表)

格式化输出
    let name = 'kk'
    let age = '10'
    let s1 = `my name is ${name} my age is ${age}`

注:如果之后需要使用``但是冲突,可以使用 \ 转义
image

boolean类型

true,fales
false:空字符串,0,null,undefined,NAN

//跨语言传输实现无障碍交流
     json序列化

null与undefined

null:空的意思,原来有可以指向的值,但被清空了
undefined:声明一个变量但没有初始化(let v1),就是undefined

Object之数组类型

对应到Python中就是list

js中一切事物都是对象,允许自定义对象

let l1 = [11,'22',22.22]    //类型是对象下面的Array

*内置方法
.length 数组的大小
    let l2 = l1.length
.push(ele) 尾部追加元素
    let l2 = l1.push(元素)
.pop() 获取尾部元素
    let l2 = l1.pop()
.unshift(ele) 头部插入元素
    let l2 = l1.unshift(元素)
.shift() 头部移除元素
    let l2 = l1.shift()
.sort() 排序
    let l2 = l1.sort()
.slice(start,end) 切片
.reverse() 翻转
.join(seq) 将数组元素拼接成字符串
.concat(val,...) 链接数组
.forEach() 将数组的每一个元素传递给回调函数并返回
    let l1 = [11,22,33,44]
    l1.forEach(function(n,m,z){console.log(n,m,z)})
        functiom:定义函数
            n:必选参数,代表当前元素
            m:可选,代表索引值
            z:可选,代表当前操作的元素来自哪里
        console.log():输出函数==print
.splice(n,m,z) 第一个元素是删除的起始位置,第二个是删除几个,没有就从开始到结尾,第三个要添加的新元素
.map() 返回一个数组元素电泳函数处理后的值得新数组
        let l1 = [11,22,33,44]
            l1.map(function(x){
        return x+1};
          )

//python复习
l = [22.22,'kk',111]
res = '|'.join(l)
print(res)
     '报错'
    //列表的内置方法要熟记

l1 = [11,22,33,44]
res = map(lamada x:x*2 l1)
print(list(res))
image

运算符

++:自增
--  :自减

let x = 10
let res1 = x++		//10:在后面先复制在自增
let res2 = ++x		//12:在前面先自增在复制

比较运算符
==   :弱等于,会自动转换数据类型到相同的状态
=== :强等于,跟Python ==一样
!==   :强不等,跟Python != 一样

逻辑运算符
&&:and
||    :or
!   :not

流程控制

if 判断

if(条件){
&nbsp;&nbsp;&nbsp;&nbsp;条件成立之后执行的代码
}else{
&nbsp;&nbsp;&nbsp;&nbsp;条件不成立执行的代码
}
----------------------------------------------------------
if(条件1){
&nbsp;&nbsp;&nbsp;&nbsp;条件1成立
}else if(条件2){
&nbsp;&nbsp;&nbsp;&nbsp;条件2成立
}else{
&nbsp;&nbsp;&nbsp;&nbsp;上述条件都不成立
}

switch

var day = new Date().getDay();
switch(day){
	case 0 :
	console.log('Sunday');
	break;
	case 1:
	console.low('Monday');
	break;
default:
	console.log('...')
}

for 循环

for (起始值;循环条件;每次循环后执行的操作){
	for循环体代码
}

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

//小练习
var l1 = [111,222,333,444,555]
for (let i=0; i<l1.length;i++){
	console.log(l1[i])
}

while循环

while(循环条件){
	循环体代码
}

三元运算符

Python:
    res = '吃饭' if 18>10 else '喝水'
Js:
    res = 18>10 ? '吃饭':'喝水'

函数

/*
在Python中:
	def 函数名(参数1,参数2,..):
		"""函数注释"""
		函数体代码
		return 返回值
*/
//在JS中:
	function 函数名(参数1,参数2,..){
		//函数注释
		函数体代码
		return 函数返回值
	}
案例:
	function f1(n){
        console.log(n)
    }
	f1(123)
	f1()	不传参数:undefined
    f1(11,22)	多传:只用第一个
    
    function f2(){
        console.log(arguments)
    }
		arguments:用户传什么就会保存什么
"""
arguments:可以获取传入的所有数据
	支持return和匿名函数
"""

箭头函数:
	let f = v => v;
	//等同于
	let f = function(v){
        return v;
    }

自定义对象

//相当于Python中的字典类型
创建方法:
	1、var d = {'name':'kk','age':10}
	2、var d = Object({'name':'kk','age':10})
查看方式:
	d.naem
	d.age
	d['name']
	d.name = 'll'	//修改
	d.hobby = 'play'	//新增
/*
在Python中实现 . 点的方式实现查看数据
class MyDict(dict):
    def __getattr__(self, item):
        return self.get(item)
    def __setattr__(self, key, value):
        self[key] = value

res = MyDict(name='jason',age=18)
print(res.name)
print(res.age)
res.xxx = 123
print(res.xxx)
print(res)    

*/

内置对象

如果需要使用内置对象,需要关键字:new

let d1 = new Date()

//序列化
JSON.stringify()		//序列化
JSON.parse()		//反序列化

/*
如果当前js中有一个布尔值true需要基于网络发送给python程序并且让python转换成布尔值 如何操作
	1.在js中使用JSON.stringify()序列化成json格式字符串
	2.基于网络发送给python程序(自动编码)
	3.python接收 解码并反序列化
*/

RegExp(正则对象)

定义:

1、let reg1 = new RegExp('正则表达式');
2、let reg2 = /正则表达式/;
test是regExp的方法,参数是字符串,返回值是布尔类型。
match是String的方法,参数是正则表达式,返回值是数组。
匹配方式:
	reg2.test('传入字符串')	//返回布尔值

全局匹配:
	let reg2 = /正则表达式/g;		//当正则表达式后面跟随g的时候会变成全局匹配会有一个lastindex属性,这个属性会在匹配成功之后光标留在文本后面,再次匹配后匹配不到内容
 reg2
    /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g
    reg2.test('jason666')
    true
    reg2.test('jason666')
    false
    reg2.lastIndex
    0
    reg2.test('jason666')
    true
    reg2.lastIndex
    8

image

image

BOM操作

BOM		浏览器对象模型>>>通过js操作浏览器
DOM		文档对象模型>>>使用js操作前端页面

BOM操作:
window对象:
	window.innerHerght		当前浏览器窗口的高度
	window.innerWidth		当前浏览器窗口的宽度
	window.open()			打开新的浏览器窗口
		打开的新窗口为子窗口,与当前窗口可以交互
	window.close()			关闭当前浏览器窗口

navgator对象:
	window.navigator.appName		获取浏览器全称
	window.navigator.appVersion		获取浏览器厂商和版本的详细字符串
	window.navigator.userAgrnt		客户端大部分信息
	window.navigator.platform		浏览器运行所在的操作系统

history对象:
	window.location			对象用于获得当前页面的地址(URL),并把浏览器重定向到新的一页面
	window.location.href		获取URL
	window.location.href="URL"	跳转到指定的URL地址
	window.location.reload()	重新加载当前页面

弹出框:
警告框:
	alert('输入内容')
确认框:
	confirm('用户确认')			//返回布尔值
提示框:
	prompt('提示信息','用户输入信息')	//返回null或者用户输入的内容

时间相关:
var t1 = setTimeout('js语句',毫秒)		//打开程序之后多少毫秒执行js语句
clearTimeout(t1)				//取消该(t1)定时任务

var t2 = setInterval('js语句',时间间隔)	//间隔多少秒循环执行一次js语句
clearIntercal(t2)				//取消该定时任务

DOM操作

DOM(Dociment Ovject Mode)是一套对文档的内容进行抽象和概念化的方法
DOM树的概念
    所有的标签都可以称之为节点,通过某一个节点可以找到任意其他节点

查找标签

要控制标签就要先学会查找标签

直接查找

// 查找前缀关键字>>>:document
查找方式:
ID查找:
	document.getElementById()
	var 标签对象 = document.getElementById('id')
		返回对象(标签对象)

class查找:
	document.getElementByClassName()
	var 标签对象 = document.getElementsByClassName('cls')[0]  //索引 0 表示直接取出第一个标签对象
	返回数组(内部元素为一个个的标签对象)

标签查找:
	document.getElementsByTagName()
	var 标签对象 = documentsByTagName('div')[0]  //索引 0 直接取出第一个标签对象
	返回数组(内部元素为一个个的标签对象)
----------------------------------------------------------------------------------------------------------------------------------
/*
注意返回类型
当变量名指向标签对象的时候一般情况下都书写成xxxEle
JS中推荐命名方式为小驼峰体
*/
----------------------------------------------------------------------------------------------------------------------------------
/*
如果js代码需要页面上加载某些标签。
那么就将script写在body标签的最底部。
需要引入外部文件也同样
*/
----------------------------------------------------------------------------------------------------------------------------------
// 小总结:
标签对象 = document.getElemenById('id')  // id查找
标签对象 = document.getElementsByClassName('cls')  // 类查找
标签对象 = document.getElementsByTagName('div')  // 标签查找

间接查找

//需要首先创建一个标签对象
var 标签对象 = document.getElementById()
标签对象.parentElement			// 找到当前标签的父标签
	.children			// 当前标签的所有子标签
	.firstElementChild		// 当前标签的第一个字标签
	.lastElenmentChild		// 当前标签的最后一个字标签
	.nextElementSibling		// 当前标签同级别下面第一个
	.previousElementSibling		// 当前标签同级别上面第一个

节点操作

使用JS代码操作标签

// 添加元素
创建标签:
	var 变量名 = document.createElement('标签名')  // 如:div,

设置属性:
	1、变量名.属性 = '设置参数'  // 创建出来的标签拥有所对应的默认属性直接 点 就可以添加内容
	2、变量名.setAttribute('属性名','属性值')  // 属性名可以是自定义或者默认的
	// 以上两种设置属性的方法

添加标签:
// 首先需要获得一个标签对象
var 标签对象 = document.getElementById('id')
// 创建标签
创建的标签 = createElement('标签名')
// 添加标签
标签对象.appendChild(创建的标签)  // 创建的标签添加到标签对象内部的最底部,尾部追加

//删除对象
// 获取删除元素的标签与父标签
父标签对象.removeChild(删除的标签对象)

// 替换节点
// 获取替换元素的标签对象与父标签对象,创建新的标签
父标签对象.replaceChild(新的标签,替换的标签)

----------------------------------------------------------------------------------------------------------------------------------
// 小总结:
var 标签对象 = document.createElment('标签')  //创建标签
标签对象.setAttribute('属性','属性值')  // 添加属性
标签对象.setAttribute('属性名')  // 获取属性
	//或者
标签对象.属性 = '属性值'  // 更改相对应的标签自带的属性的值
标签对象.属性  // 获取标签自带的属性的值

var 父标签对象 = document.getEelementById('id')  // 获取其父标签
父标签对象.appendChild(标签对象)  // 添加标签

属性节点

找到要操作的标签,更改其内部文本

// 获取文本节点的值
var 标签对象 = doculement.相关节点()
标签对象.innerText
// 或者
标签对象.innerTHML

// innerText:
	不添加复制符号就是获取内部文本
	添加复制符号就是更改内部文本
	标签对象.innerText
	标签对象.innerText = '新的文本内容'
// innerHTML
	不添加赋值符号就是获取内部文本和所对应的标签
	添加复制符号就是更改内部文本和岁所对应的标签
	标签对象.innerHTML
	标签对象.innerHTML = '<a>这是a标签的文本</a>'

----------------------------------------------------------------------------------------------------------------------------------
// 小总结:
innerText
innerText = ''
innerHTML
innerHTML = ''

获取值操作

// 获取普通文本数据
	标签对象.value			可以获取用户输入的内容

// 获取特殊的文件数据
	标签对象.value			获取的仅仅是这个文件所在的计算机的文件地址
	标签对象.files[0]		获取单个文件数据
	标签对象.files			获取所有文件数据,数组的形式,可以索引取值取出内部文件数据对象

class操作

// 通过class操作标签
classlist			// 查看所有的class
classlist.remove(cls)		// 删除指定的类
classlist.add(cls)		// 添加指定的类
classlist.contains		// 返回布尔值,判断这个类是否存在
classlist.toggle(cls)		// 判断是否存在这个类,存在则删除,不存在则添加

JS操作CSS

var 标签对象 = 获取标签
标签对象.style.CSS的操作 = '更改之后的属性值'
----------------------------------------------------------------------------------------------------------------------------------

<!DOCTYPE html>
<html>
<body>

<h1 id="id1">我的标题</h1>

<button type="button" 
onclick="document.getElementById('id1').style.color = 'red'">
单击我!</button>

</body>
</html>
----------------------------------------------------------------------------------------------------------------------------------

事件

给HTML标签绑定一个自定义的功能

绑定事件的方式一:
<button onclick="func()">点我</button>
<script>
    function func() {
       alert(123)
    }
</script>

绑定事件的方式二:
<button id="d1">选我</button>
<script>
    // 1.先查找标签
    var btnEle = document.getElementById('d1')
    // 2.绑定事件
    btnEle.onclick = function () {
       alert(456)
    }
</script>

绑定事件的方式三:
<h1 id="id1">我的标题</h1>
<button type="button" 
onclick="document.getElementById('id1').style.color = 'red'">
单击我!</button>

内置参数this

this指代的就是当前操作对象本身

// 在事件的函数体代码内部使用
操作对象.事件参数 = function (){
	alert(123)
	console.log(this)
}

事件部分参数


onclick				// 单击事件:鼠标点击一下运行事件内的代码
onfocus				// 焦点事件:当鼠标在当前位置所执行事件内的代码
onblir				// 失焦事件:当鼠标移走当前位置所执事件内的代码
onchange			//文本域变化事件
onload				//等待...加载完毕执行的事件

常见的事件操作

事件小练习

------------------------------------------------------------------------------------------------------------------------------
// 通过点击button按钮实时显示当前时间
<!DOCTYPE html>
<html>
<body>
<p>这是时间事件小练习</p>
<button id='b1'>点击</button>
<p id='p1'></p>

<script>
	// 查找标签
	var butEle = document.getElementById('b1')
    // 创建一个时间函数
    function date1() {
    	// 获取当前时间
    	var newDate = new Date()
        // 将当前时间添加到p标签中
        document.getElementById('p1').innerText = newDate
    }
    // 绑定事件
    butEle.onclick = function () {
    		// 事件为定时
			setInterval(date1, 1000)
        }
</script>
</body>
</html>
------------------------------------------------------------------------------------------------------------------------------
// 数据校验
<!DOCTYPE html>
<html>
<body>
<p>请输入内容</p>
<p>username:<input type='text' id='n1'><span id = 's1'></span></p>
<p>password:<input type='password' id='p1'></p>
<button id='b1'>登录</button>
<p id = 'p2'></p>
<script>
// 获取标签
var butEle = document.getElementById('b1')

// 绑定事件
butEle.onclick = function () {
	document.getElementById('p2').innerText = Date()
	// 获取用户输入标签
    var nameEle = document.getElementById('n1')
  	
    // 判断用户输入
    if (!nameEle.value) {
    	// 如果用户输入为空,就提醒
        var spEle = document.getElementById('s1')
        spEle.innerText = '账户不能为空'
    }
}
</script>
</body>
</html>
------------------------------------------------------------------------------------------------------------------------------

事件补充

当某个标签已经有事件了,那么在绑定事件会造成事件冲突

posted on 2022-02-10 21:46  邵邵。  阅读(55)  评论(0)    收藏  举报