• JavaScript笔记


    JavaScript

    数据类型概览

    1. number
    2. 字符串
    3. 布尔值
    4. 逻辑运算符
    5. 比较运算符(等于,类型不同值相同也会返回true;=绝对等于,类型和值都相同才会返回true)
    6. 尽量避免使用浮点数进行运算,存在精度问题!
    /*使用Math的abs绝对值进行相近计算*/
    <script>
    Math.abs((1/3)-(1-2/3))<0.00000001
    </script>
    
    1. null和undefined(未定义)
    2. 数组(可以放任何对象)
    var arr = [1,5,"dd",null,true];
    
    1. 对象
    var person = {
       name:"xxx",
       age:3,
       tage:['js','java']
    }
    //取值
    person.name
    

    严格检查模式

    
    ### 数据类型
    
    #### 字符串
    
    1. 正常字符串使用单引号或双引号包裹。
    
    2. 注意转义字符。
    
    3. 多行字符串编写。
    
       ``` html
       var msg = `
                  HELLO 
                  你好
                   `;
    
    1. 模板字符串

      let name = 'xxx';
      let msg = '你好啊,${name}';
      
    2. 字符串长度

      str.length
      
    3. 字符串不可变

    4. 大小写转换

      //这里是方法
      student.toUpperCase()
      student.toLowerCase()
      
    5. 获取指定字符的下标

      student.indexOf('t')
      
    6. 获取指定位置的字符串

      //截取范围[)
      student.substring(x,y)//[x,y)如果y不写就是x到最后
      

    数组

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

    var arr = [1,2,5,2,1]  //通过下标取值赋值
    arr[0]=1
    
    1. 长度

      arr.length
      

      注意:假如给arr.length赋值,数组大小会变,赋值过小,元素会丢失。

    2. 获取指定字符的下标

      arr.indexOf(2)
      
    3. slice()截取Array的一部分,返回一个新的数组,类似substring

    4. push()、pop()往数组尾部压入弹出数据

      arr.push("1",2);//在数组最后添加元素
      arr.pop();//弹出(删除)数组最后一个元素
      
    5. unshift()、shift() 头部

      arr.unshift("1",2);//在数组头部添加元素
      arr.shift();//弹出(删除)数组头部一个元素
      
    6. 排序

      arr.short();
      
    7. 元素反转

      arr.reverse();
      
    8. 数组拼接

      arr.concat([1,54,9]);
      

      注意:该方法并没有修改数组,只是返回一个新的数组。

    9. 连接符打印拼接数组,使用特定的字符链接

      arr.join('-')
      
    10. 多维数组

      arr = [["a","b"],[1,2]];
      

    对象

    var person = {          //  var 对象名 = { 
       name:"xxx",          //     属性名:属性值,
       age:3,               //     属性名:属性值,
       tage:['js','java']   //     属性名:属性值
    }                       //     }
    

    Js对象用{...}表示一个对象,键值对描述xxx:xxx,多个属性之间用,隔开,最后不加,

    1. 对象赋值

      person.name = "yyy";  //赋值
      person.name;          //取值
      
    2. 使用一个不存在的对象属性不会报错,显示未定义undefined

      person.xxx;
      undefined
      
    3. 动态删减属性,通过delete删除对象属性

      delete person.name;
      
    4. 动态添加,直接给新的属性添加值即可

      person.haha = "haha";
      
    5. 判断属性值是否在这个对象中 xxx in xxx

      'age' in person;
      //in也可以用来寻找父类的方法
      
    6. 判断属性是否是自身定义的(非父类继承)hasOwnProperty()

      'age' hasOwnProperty();
      

    流程控制

    1. if判断

    2. while循环

    3. do while循环

    4. for循环

      //类似java forEach遍历数组 类型尽量选择let
      //forIn打印数组下标
      for(let num in age){
          console.log(num)
      }
      //forof遍历数组
      for(let num of age){
          console.log(num)
      }
      
    5. forEach循环

      //js的forEach和java不同,需要用函数进行遍历
      var age = [1,,54,5,515,1,51,5]
      age.forEach(function(value){
          console.log(value)
      })
      

    Map和Set

    Map和Set是ES6新增功能

    var map = new Map([['tom',100],['jack',90],['join',80]]);
    var name = map.get('tom'); //通过key获得value
    map.set('admin',666);  //添加
    map.delete('tom');  //删除
    console.log(name);
    

    Set:无序不重复集合

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

    遍历数组

    //遍历map
    var map = new Map([['tom',100],['jack',90],['join',80]]);
    for(let x of map){
        console.log(x)
    }
    
    var set = new Set([3,2,6,1])
    for(let x of set){
        console.log(x)
    }
    

    函数

    定义函数

    //绝对值函数,写法一
    function abs(x){
      if(x>=0){
          return x;
      }else{
          return -x;
      }
    }
    

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

    //绝对值函数,写法二
    var abs = function (x){
      if(x>=0){
          return x;
      }else{
          return -x;
      }
    }
    

    调用函数

    abs(10)
    

    参数问题:js可传任意个参数,也可以不传参数。可在函数中加入判断手动抛出异常。

    function abs(x){
        if(typeof x!=='number'){  //通过typeof判断传入的类型是否为想要的
            throw 'Not a Number';  //通过throw来抛出异常
        }
        if(x>=0){
            return x;
        }else{
            return -x;
        }
    }
    

    当传入函数的参数大于函数定义的参数时,js不会报错,而且也可以使用在函数括号的最后加入...rest就能在函数中使用其余参数了。

    function zxc(a,b,...rest){
        console.log(rest);  //这里可以收到除a,b所有传入的参数
    }
    

    变量的作用域

    在js中,var定义的变量是有作用域的。在函数体中声明的变量在函数体外是无法调用的。

    function a(x){
        x = x + 1;
    }
    x = x + 2;  //这里js会主动报错
    
    • 两个函数使用了相同的变量名,只要变量在函数内部,就不冲突。

    • 内部函数可以访问外部定义的变量,反之不行。

    • 内外函数变量重名,优先使用自己函数内的变量。

    • js定义变量同一提到最前面。

    <script>
        //函数外定义的变量,所有函数都可以调用
        var x = 1;
        function a(x){
        x;
        }
        function b(x){
        x;
        }
    </script>
    

    规范——由于所有全局变量都绑定在window上。如果不同的js文件使用了相同的全局变量,会发生冲突!

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

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

    作用域let

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

    function a(){
        for(let i=0;i<100;i++){
            console.log(i)
        }
        console.log(i)  //使用了let定义i,在循环外就无法访问到了
    }
    

    常量const

    ES6之前,约定全部用大写字母定义的变量就是常量,建议不要修改(hhhh...

    在ES6引入了常量关键字

    const PI = '3.14';  //使用const定义就不会改变了
    

    方法

    写在对象中的函数

    var sx = {
        name : 'aa',
        birth: 2000,
        age : function(){
            var now = new Date().getFullYear();
            return now-this.birth;
        }
    }
    //调用方法:sx.age()
    

    内部对象

    • Date

      var now = new Date();
      now.getFullYear();//年
      now.getMonth();//月
      now.getDate();//日
      now.getTime;//时间戳
      
    • JSON

      • json是一种轻量级的数据交换格式。

      • 层次结构清晰。

      • 易于阅读和编写,也易于机器解析和生成,可有效提高网络传输效率。

      • 对象用 {}

      • 数组用 []

      • 键值对用 key:value

      • 对象转化为json

        var user = {
            name:'xxx',
            age:3,
            gender:'male'
        }
        var jsonUser JSON.stringify(user);
        //jsonUser即为JSON字符串
        
      • json转化为对象

        var obj = JSON.parse('{"name":"xxx","age":3,"gender":"male"}')
        //即可将json字符串转化为对象
        

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

        JSON和JS对象的区别

        var obj = {a:'hello',b:'hellob'};
        var ison = '{"a":"hello","b":"hellob"}'
        

    面向对象编程

    class继承(ES6引入)

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

      class Student{
          //constructor代表构造器
          constructor(name){
              this.name = name;
          }
          hello(){
              alert('hello')
          }  
      }
      var xx = new Student('xxx');
      
    2. 继承

      class XiaoStudent extends Student{
          constructor(name,grade){  
              super(name); //实现父类
              this.grade;
          }
          mygrade(){
               alert('xiaoStu')
          }
      }
      //本质还是查看对象原型
      

    操作BOM对象

    location

    location代表当前页面的URL信息

    host
    href
    reload()
    ...
    

    document

    document代表当前的页面

    <dl id="app">
        <dt>java</dt>
        <dt>web</dt>
        <dt>spring</dt>
    </dl>
    <script>
    var dl = document.getElementById('app');
    </script>
    

    document可以获取本地cookie,服务器端可以设置cookie:httpOnly

    操作DOM对象

    DOM:文档对象模型。浏览器网页就是一个DOM树形结构!

    • 更新Dom节点
    • 遍历Dom节点(得到)
    • 删除一个Dom节点
    • 添加一个新的Dom节点

    如果要操作一个Dom节点,首先要获得一个Dom节点。

    1. 获得DOM节点
    <div id="father">
       <h1>标题</h1>
       <p id="p1">p1</p>
       <p class="p2">p2</p> 
    </div>
    <script>
    var i = document.getElementsByTagName()  //标签选择器
    var y = document.getElementsById()  //ID选择器
    var z = document.getElementsByClassName()  //class选择器
    
    var f = document.getElementsById('father');
    var c = f.children;  //获取父节点下的所有子节点
    </script>
    
    1. 更新节点
    <div id="id1">
    </div>
    <script>
    var id1 = document.getElementsById('id1');  //根据id获取节点
    id1.innerText="xxx";  //可以修改文本值
    id1.innerHTML="<strong>123</strong>";  //可以解析html文本标签
    id1.style.color='red';  //改变样式
    id1.style.fontSize='200px';  //驼峰命名
    </script>
    
    1. 删除节点

      步骤:先删除父节点,再通过父节点删除自己

    <div id="father">
       <h1>标题</h1>
       <p id="p1">p1</p>
       <p class="p2">p2</p> 
    </div>
    <script>
    var s = document.getElementsById('father');//获取自己节点
    var f = p1.parentElement;  //获取父节点
        f.removeChild(p1);  //通过父节点删除自己
    </script>
    
    1. 插入节点

      ​ 我们获得了某个Dom节点,假设这个Dom节点是空的,可以通过innerText()添加元素,但如果这个Dom节点存在元素,就会产生覆盖。可以使用追加append()操作。

    <p id="js">js</p>
    <div id="list">
        <p id="se">java se</p>
        <p id="ee">java ee</p>
        <p id="me">java me</p>
    </div>
    <script>
    var js = document.getElementById('js');
    var list = document.getElementById('list');
    list.appendChild(ks); //追加到后面
    </script>
    
    1. 创建新节点
    var newP = document.createElement('p'); //新建一个p标签
    newP.id='np'; //为新的p标签添加id
    newP.innerText = 'xxx'; //为新的p标签添加文本
    
    1. 创建一个标签节点
    var myScript = document.createElement('script');
    myScript.setAttribute('type','text/javascript');
    

    操作表单

    • 表单:from,也是dom树的一个节点

    • 获取表单值

    <form>
        <span>username:</span><input type="text" id="username">
        <p>
           <span>sex:</span>
        <input type="radio" name="sex" value="man" id="boy">man
        <input type="radio" name="sex" value="woman" id="boy">woman  
        </p>
    </form>
    
    <script>
    var input_text = document.getElementById('username');//得到输入框的值
    input_text.value = '123';//修改输入框的值
    var boy = document.getElementById('boy');
        boy.checked; //判断选择框,如果被选中则返回true;
        boy.checked = true;  //使用js选中
    </script>
    
    • 使用js验证表单
    <form>
       <span>username:</span><input type="text" id="username">
       <span>username:</span><input type="password" id="password">
        <!--绑定onclick点击事件-->
        <button type="button" onclick="aaa()">提交</button>
    </form>
    
    <script>
    function aaa(){
     var uname =  document.getElementById('username');
     var pwd =  document.getElementById('password');
    }
    </script>
    
    • 使用表单进行加密验证
    <!--表单提交事件,加入return当aaa()返回false时不会提交-->
    		<form id="f" method="post" onsubmit="return aaa()">
    			<span>username:</span><input type="text" id="username" name="username">
    			<!--用户输入的密码框-->
    			<span>username:</span><input type="password" id="input_password" name="input_password">
    			<!--提交请求的密码框-->
    			<input type="hidden" id="md5_pass" name="password" />
    			<!--绑定onclick点击事件-->
    			<button type="button">提交</button>
    		</form>
    
    		<script>
    			function aaa() {
    				var uname = document.getElementById('username'); //获取表单用户名
    				var pwd = document.getElementById('password');  //获取表单密码
    				var md5pwd = document.getElementById('md5_pass');  //获取加密表单
    				md5pwd.value = md5(pwd.value);  //内容添加至隐藏密码框(需引入md5文件)
    				return true;
    			}
    		</script>
    

    jQuery库

    jQuery中存在大量的JavaScript函数

    jQuery公式:$(selector).action() :$符号(js同款选择器).事件

    <a href="" id="test_jquery">test</a>
    		<script>
    			//选择器就是js的选择器
    			$('#test_jquery').click(function() {
    				alert('hello,jQuery')
    			})
    		</script>
    
    • jQuery选择器
           <script>
    			$('p').click(这里写函数)  //标签选择器
    			$('#id').click(这里写函数)  //id选择器
    			$('.class').click(这里写函数)  //class选择器
    		</script>
    

    文档工具站:http://jquery.cuishifeng.cn/index.html

    • 操作DOM
    $('#test_jquery').text();  //获取值
    $('#test_jquery').text('XXXX');  //修改值为xxxx
    $('#test_jquery').html();  //获取值
    $('#test_jquery').html('<strong>123</strong>');  //设置值
    $('#test_jquery').css("color","red");  //设置样式
    
  • 相关阅读:
    ajax
    vue 思維導圖
    python项目_log日志的使用
    mysql数据库_serialisers
    常见的时间复杂度及其增长速度比较
    C++中的sort()函数
    用C++实现输入三个整数,中间用逗号隔开
    python——递归函数
    python——函数
    python——可变对象和不可变对象
  • 原文地址:https://www.cnblogs.com/sxblogs/p/12917414.html
Copyright © 2020-2023  润新知