js操作
一、数据类型之布尔值
# js中布尔值的关键字为boolean 在js中布尔值的写法为: true,false js中不用大写 而在python中为;True,False 首字母要大写 python中表示为False的有:0,None,'',[],{}.. 而在js中表示为false的有:0,null,undefined,NaN ''' 在js中null表示: 曾经定义过有值 后来被删除了 就没有值了 空了 而undefined是就没有被定义过 一开始就没有 '''
二、数据类型之对象(object)
# js中的对象 相当于是python中的列表 '''在js中也是一切皆是对象''' let l1 = [1, 2, 3, 4, 5] # 常见的内置方法 # 1.追加元素 js中使用的push() python中使用append() # 2.弹出元素 js和python都是pop() # 3.头部插入元素 js中使用unshift() python使用insert() # 4.头部移除元素 js中使用shift() python可以使用pop(0) remove() # 5.扩展列表 js中使用concat() python中可以使用ectend() '''但是js对象有自己独有的内置方法''' # 6.forEach(相当于for循环取值 不过是对象独有的方法) var l2 = ['jason','tony','kevin','jerry','oscar','jerry'] '''function就是定义一个函数 arg1就是参数 {}就是在里面写函数体代码''' l2.forEach(function(arg1){console.log(arg1)}) # 第一个参数就是for循环提取的值 VM1691:1 jason VM1691:1 tony VM1691:1 kevin VM1691:1 jerry VM1691:1 oscar VM1691:1 jerry l2.forEach(function(arg1,arg2){console.log(arg1,arg2)}) # 第二个参数就是值的索引 VM1742:1 jason 0 VM1742:1 tony 1 VM1742:1 kevin 2 VM1742:1 jerry 3 VM1742:1 oscar 4 VM1742:1 jerry 5 l2.forEach(function(arg1,arg2,arg3){console.log(arg1,arg2,arg3)}) # 第三个就是值的来源 VM1803:1 jason 0 ['jason', 'tony', 'kevin', 'jerry', 'oscar', 'jerry'] VM1803:1 tony 1 ['jason', 'tony', 'kevin', 'jerry', 'oscar', 'jerry'] VM1803:1 kevin 2 ['jason', 'tony', 'kevin', 'jerry', 'oscar', 'jerry'] VM1803:1 jerry 3 ['jason', 'tony', 'kevin', 'jerry', 'oscar', 'jerry'] VM1803:1 oscar 4 ['jason', 'tony', 'kevin', 'jerry', 'oscar', 'jerry'] VM1803:1 jerry 5 ['jason', 'tony', 'kevin', 'jerry', 'oscar', 'jerry'] # 7.splice splice(起始位置,删除个数,新增的值) l2.splice(2,1,'哈哈哈') ['kevin'] l2 ['jason', 'tony', '哈哈哈', 'jerry', 'oscar', 'jerry'] 第一个参数就是第几个索引 第二个参数就是删除几个数据 第三个参数就是把删除的值给替换 # 8.map 就是映射
三、数据类型之自定义对象
#相当于是python中的字典 # 两种定义方式 1. let d1 = {'name':'jason', 'age':18} 2. let d2 new Object() 这个时候d2是没有值的 就是一个空字典 自定义对象可以直接通过句点符的方式取值 d1.name jason d1['name'] jason python中如果想要句点符取值 那么需要自己定义一个类然后继承dict 在使用双下setattr和双下getattr方法
四、运算符
# 1.算数运算符 + - * / % ++ -- 普通的加减乘除是跟python用法是一样的 ++和--要看数字要在哪边 var x=10; var res1=x++; 先赋值后自增 var res2=++x; 先自增后赋值 res1 10 res2 12 # 2.比较远算符 > >= < <= != == === !== 弱等于:自动转换类型 '5' == 5 '结果是true js会自动转换成相同数据类型 再比较值是否一样' 强等于:不转换类型 '5'===5 '结果是false' # 3.逻辑运算符 && 等价于python中的and || 等价于python中的or ! 等价于python中的not
五、流程控制
# 1.if判断 python: 1.单if分支 2.if...else分支 3.if...elif...else分支 js:相当于把大括号换成了冒号 1.单if分支 if(判断条件){ 条件成立执行的分支代码块 } 2.if...else分支 if(条件){ 条件成立执行的分支代码块 }else{ 条件不成立执行的分支代码块 } 3.if...else if ...else分支 if(条件1){ 条件1成立执行的分支代码块 }else if(条件2){ 条件1不成立条件2成立执行的分支代码块 } else{ 条件1和2都不成立执行的分支代码块 } # js还有一个python没有的一个流程控制 switch case语法 var day = new Date().getDay(); # 获取当前时间 switch (day) { case 0: console.log("Sunday"); break; # 如果不加break会给予当前位置一直往下运行 case 1: console.log("Monday"); break; default: # 如果上面都没有对应 就会执行default console.log("...") }
# 2.循环结构 for(let i=1;i<101;i++){ console.log(i) } # 语法结构: for(起始位置,循环条件,循环一次之后做的事) {循环体代码} eg:打印数组内所有的数据值 l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 'jason'] for(let i=0;i<l1.length;i++){ console.log(l1[i]) } # 3.while循环 while(条件){ 循环体代码 }
六、三元运算符
python中的三元运算符 res = 11 if 1 > 2 else 22 '''if后面的条件成立则使用if前面的值 不成立则使用else后面的值''' js中的三元运算符 res = 1 === 2 ? 11 : 22 '''?前面的条件成立则使用冒号左边的值 否则使用冒号右边的值''' # 不管是什么编程语言 都不推荐嵌套使用
七、函数
# 1.函数的定义 ''' 语法结构: function 函数名(参数1, 参数2){ 函数体代码 reutrn 返回值 } 1.function 定义函数的关键字 相当于python中的def 2.函数名的命名参考变量名 并且js推荐使用驼峰体 3.参数可写可不写 4.return 返回值 与python一样 ''' # 2.函数调用: # 函数名加括号 有参则传参即可!!! # 3.无参函数 function f1(){console.log(111)} # 直接函数名加括号即可 # 4.有参函数 function f2 (a,b){console.log(a,b)} f2() # 可以调用 相当于传了两个undefined undefined undefined f2(1) # 可以调用 只用一个值另一个用undefined顶替 1 undefined1 f2(1,2) # 这个就跟python一样了 1 2 f2(1,2,3,4,5) # 可以调用 只接收前两个值 1 2 '''js中的函数提供了 有个内置关键字arguments''' function f2(){ console.log(arguments) } # arguments关键字可以知道传了几个参数 # 5.返回值 function f3(){ return 123 } # js中return不支持返回多个数据 如果想返回多个值需要自己手动给他们包一个数组或对象中 # 6.匿名函数 var ff = function (){ console.log(123) } # 匿名函数就是不用写函数名即可 也是要配合其他函数使用 # 7.箭头函数 var f = function(v){ return v; } 可以简写为 var f = v => v; var f = () => 5; # 等同于 var f = function(){return 5}; var sum = (num1, num2) => num1 + num2; # 等同于 var sum = function(num1, num2){ return num1 + num2; # 这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中 }
八、内置对象
# js的内置对象 相当于python的内置函数和内置模块(提前写好了 直接调用即可) # 固定语法: var 变量名 = new 内置对象名(); # 1.日期对象 Date var d1 = new Date() d1.toLocaleString() '2022/8/11 17:58:41' d1.toLocaleDateString() '2022/8/11' d1.toLocaleTimeString() '17:58:41' # 2.json对象 python的序列化和反序列化 import json json.dumps() json.loads() js中因为json很重要所以json不需要new直接点即可 JSON.stringify() JSON.parse() var d1 = {name: 'jason', age: 18} {name: 'jason', age: 18} var d1Json = JSON.stringify(d1) d1Json '{"name":"jason","age":18}' JSON.parse(d1Json) {name: 'jason', age: 18} # 3.RegExp(正则) # python中想要使用正则的话需要使用 re模块 import re # js创建正则表达式的两种方式 var reg1 = new REGExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; # 推荐使用(简化) # 使用正则 reg2.test('jason123') true '''括号内什么都不写 就相当于写undefined''' reg2.test() true var reg3 = /undefined/ reg3.test('jason123') false reg3.test() true reg3.test('undefined') true # 全局匹配 在正则表达式的最后加一个g var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g; reg2.test('jason666') true # 匹配完之后光标就会在最后面 reg2.test('jason666') false # 再次匹配就没有东西匹配所以就是false 这次匹配完光标又会回到最前面 之后匹配就是true false交替
九、BOM和DOM操作
# BOM:浏览器对象模型 就是通过js代码可以跟浏览器交互 # DOM:文档对象模型 就是通过js代码可以跟html交互
1.BOM操作
# 打开子页面 window.open('http://www.baidu.com','', 'width=200px,height=200px') 会打开一个子页面 子页面的操作可以通过一些手段传递给父页面(父子联动) # 关闭子页面 window.close() window.navigator.appVersion # 获取当前浏览器的厂商和版本 window.navigator.userAgent # 客户端绝大部分信息 window.history.forward() # 前进一页 window.history.back() # 后退一页 window.location.href # 获取页面的URl地址 window.location.reload() # 刷新页面 window.location.href = url # 跳转到指定的页面 window.location.reload() # 刷新页面 ''' window可以省略不写 eg:window.location.href 可以简写为 location.href ''' # 弹框 alter() # 警告框 confirm # 确认框 获取用户点击确认或则取消 返回true或false prompt # 提示框 获取用户输入信息 也可以通过第二个参数添加默认信息 # 定时 关键字: setInterval:发起定时任务 clearInterval:取消定时任务
eg: var s1 = null function showMsg() { function func1(){ alert('终于要干饭了') # 弹出框 } s1 = setInterval(func1, 3000) # 每隔三秒执行func1函数 } function clearMission(){ clearInterval(s1) # 取消s1定时任务 } setTimeout(clearMission, 9000) # 九秒后执行clearMission函数 showMsg() # 执行showMsg函数
2.DOM操作
# JS操作html和CSS操作html学习套路一致 都是先学如何查找标签 '''直接查找''' document.getElementById() # 根据id值查找标签 结果直接是标签对象本身 # <div id="d1">div2</div> document.getElementsByClassName() # 根据class值查找标签 结果是数组类型 # [div.c1] document.getElementsByTagName() # 根据标签名查找标签 结果是数组类型 # [div, div#d1, div.c1, d1: div#d1] ''''间接查找''' parentElement 父节点标签元素 children 所有子标签 firstElementChild 第一个子标签元素 lastElementChild 最后一个子标签元素 nextElementSibling 下一个兄弟标签元素 previousElementSibling 上一个兄弟标签元素 eg: let divEle = document.getElementById('d1') # 这个时候我们就可以通过divEle点上面的方法查找标签 一直点都可以 '''节点操作''' # 动态创建一个a标签并添加到页面的指定位置 var aEle = document.createElement('a') # 创建一个a标签 aEle.href = 'http://www.sogo.com/' # 设置href属性 aEle.innerText = '点击去搜狗' # 设置文本内容 var divEle = document.getElementById('d1') # 查找标签 divEle.append(aEle) # 内部追加标签 # 就是在div标签中添加了一个a标签 '''属性操作''' 标签可以有默认属性 eg:id class ... 也可以有自定义属性 eg:username password ... XXXEle.属性 # 只能是默认属性 XXXEle.setAttribute() # 既可以设置自定义属性也可以设置默认属性 divEle.getAttribute("age") # 获取指定属性 divEle.removeAttribute("age") # 移除指定属性 '''文本操作''' inner.HTml inner.Text # 获取值的时候 innerText只会获取文本内容 innerHTML获取文本和标签 # 设置值的时候 innerText不识别标签语法 innerHTML识别标签语法