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识别标签语法

 

posted @ 2022-08-25 19:14  stephen_hao  阅读(39)  评论(0编辑  收藏  举报