• js基础


     <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
    
    浏览器不会执行JS代码,是通过JS内置引擎(解释器)来执行代码. 
    BOM 浏览器对象模型
    DOM 文档对象模型
    
    javascript 由三部分组成:ECMAScript,DOM,BOM
    
     JavaScript 应用场景
    1. 网页特效
    
    2. 服务端开发(Node.js)
    
    3. 命令行工具(Node.js)
    
    4. 桌面程序(Electron)
    
    5. App(Cordova) 
    
    6. 控制硬件-物联网(Ruff)
    
    7. 游戏开发(cocos2d-js)
    
    行内样式   <button onclick="alert('你好啊')">点击</button>
    内嵌样式   <script></script>
    外部样式   <script src="outdoor.js"></script>  
    
    警示框  alert('迪丽热巴');
    控制台 console.log('古丽扎娜');
    提示用户输入框 prompt('请输入您喜欢的明星:');
    typeof() 判断数据类型
    isNaN 检测是不是数字 是数值结果就是false  是字符就是true
    
    
    什么是变量?
    概念:变量是用于存放数据的容器.
    声明变量,并赋值
    语法:var 变量名 = 变量值;
    
    
    二进制 0 1 
    八进制 0~7
    十进制 12  77  99
    十六进制 0~9  a~f 0x12
    
    数据类型转换
        typeof 检测字符或者数值    
        
        在chrome 里面 数值类型 是蓝色  字符型是 黑色
        数值里面只有一个字符就会转成 字符串
        
        Number()转成数字类型
        toString() 转换字符
        parseInt() 整数
        parseFloat 浮点数
        Boolean()  转换成布尔类型  只有 真/假   true/false 
        isNaN      不是数值(true)  是数值(false)  是不是人
        
        转换为Boolean值
        代表 空、否定的值 会被转换为 false 有五种  “ ''、0、NaN、null、undefined  
        其余任何值都会被转换为 true
    
    
    
    
    
           换行符(重要)newline
    
    
     
    
          斜杠 
    
    
    '
    
          单引号 '
    
    
    "
    
           双引号 "
    
    
    	
    
           Tab
    
    
           
    
    空格   blank
    
    
    
    
    
           回车符
    
    &&并且    ||或者
    
    1. ()  优先级最高 
    2. 一元运算符  ++   --   !
    3. 算数运算符  先*  /  %   后 +   -
    4. 关系运算符  >   >=   <   <=
    5. 相等运算符   ==   !=    ===    !==
    6. 逻辑运算符 先&&   后||
    7. 赋值运算符
    
    if (条件表达式) {
        // [如果] 条件成立执行的代码
    } else {
        // [否则] 执行的代码
    }
    
    if-else-if语句语法:
                    if (表达式1) {
                        执行代码1
                    } else if (表达式2) {
                        执行代码2
                    } else if (表达式3) {
                        执行代码3
                    } else {
                        执行代码4
                    }
    
    三运表达式达式1 ? 表达式2 : 表达式3
    
    
    switch( 变量 ){ 
        case value1:
            //表达式结果 等于 value1 时 要执行的代码
            break;
        case value2:
            //表达式结果 等于 value2 时 要执行的代码
            break;
        default:
            //表达式结果 不等于任何一个 value 时 要执行的代码
    }
    
    
    for(初始化; 条件表达式; 自增表达式 ){
        //循环体
    }
    双重for循环
    for (外循环的初始; 外循环的条件; 外循环的增量) {
        
        for (内循环的初始; 内循环的条件; 内循环的增量) {  
    
           需执行的代码;
       }
    
    }
    
    while (条件表达式) {
        // 循环体代码 
    }
    
    
    do{
        // 循环体代码 - 条件表达式为 true 时重复执行循环体代码
    } while(条件表达式);
    
    continue 跳出本次循环
    break 退出整个循环
    
    
    arr.length 获得数组长度
    列如:
       <script>
            //索引下标    0      1        2       3        4       5       6
            var arr=['星期一','星期二','星期三','星期四','星期五','星期六','星期七',];
            console.log(arr[5]); //输出的是 星期六
            console.log(arr[2]);// 输出的是 星期三
            console.log(arr.length); //数组长度  7
        </script>
    
    数组中i 代表数组 索引(下标) arr[i]代表数组的元素
    
    翻转数组:
    0,1,2,3,40,1,2,3,4 新    数组长度-i-1  length-i -1
    冒泡
    外层 数组长度-1  length-1  
    内层 数组长度-i -1     length-i -1
    判断进行交换
    
    
    函数 就是 封装了 一段 可被重复调用执行的 代码块。
    
      基本函数写法:
                     function sayHi(){}
                     sayHi();
                 匿名函数:
                     function(){}
    
                 函数表达式
                     var fn=function(){}
                     fn();
    
                 自调用函数: 
                     (function(){})()
                
                 retrun 后的代码不被执行
                
                function add(num1,num2){
                    //函数体
                    return num1 + num2; // 注意:return 后的代码不执行
                    alert('我不会被执行,因为前面有 return');
                }
    
        return 返回值
    
        arguments 伪数组
    
    函数可以作为参数传递
    
    
    function fn() {
        return function() {
            console.log('函数可以作为返回值');
        }
    }
    
    var ff = fn();
    // 相当于
    // var ff = function() {
    //     console.log('函数可以作为返回值');
    // };
    ff();
    
    
    局部变量
    
    - 在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)
    - 局部变量只能在该函数内部使用
    
    
    全局作用域
    
    供所有代码执行的环境(整个script标签内部)  或者一个独立的js文件中  
    
    
    - JavaScript解析器会在全局环境下查找 var、function关键字,变量只声明不赋值,函数声明不调用。
    
    - 预解析只发生在当前作用域下
    
    
    
    对象: 就是将现实事物抽象为功能代码.  将现实世界的东西,用对象的语法格式来表示.
            对象的语法:  对象中有属性和方法
            (名词)   属性  
            (动词)    称为  方法
        
    
    
    - 对象里面的属性调用 :   对象.属性名         这个小点 就理解为 的 
    
    - 对象里面的属性另外调用方式 :   对象['属性名']    注意  方括号里面的属性 必须加 引号   我们后面会用
    
    - 对象里面的方法调用: 对象.方法名()       注意这个方法名字后面一定加括号
    
    
    对象.属性名
    对象['属性名']
    对象.方法名()  
    
    
            对象的三种写法: 
    1.字面量写法
    var star = {
        name : '刘德华',
        age : 18,
        sex : '男',
        sayHi : function(){
            alert('大家好啊~');
        }
    };
    console.log(star.name);
    或console.log(star['name']);
    star.sayHi();
    
    对象.属性名
    对象['属性名']
    对象.方法名()
    
    
    2. new Object()写法
    
    var zs = new Object();
    zs.name='张三';
    zs.age=18;
    zs.sayHi=function(){}
    
    对象名.属性名 = 值
    对象名.方法名 = function(){}
    
    
    构造函数可以创建多个对象
    把相同定的属性和方法进行抽象,然后进行函数封装
    1. 构造函数用于创建某一大类对象,首字母要大写。
    
    2. 构造函数要和new一起使用才有意义。
    
    
    function 构造函数名(参数1..){
    构造函数名首字母大写
    this.属性名=属性值;
    this.方法名=funtion(){}
    }
    
    调用构造函数 new 构造函数名();
    
    
    
    3.构造函数写法
      function Programmer (name,age,sex){
                 this.name = name;
                 this.age =age;
                 this.sex = sex;
                 this.sing =function(){
                     alert('敲代码');
                 }
             }
             var wangmiao = new Programmer('汪苗',18,'男');
             console.log(wangmiao.name);
             wangmiao.sing();
    
    
    
    new会在内存中创建一个新的空对象
    new 会让this指向这个新的对象
    执行构造函数里面的代码  目的:给这个新对象加属性和方法
    new会返回这个新对象 (所以构造函数里面不需要return)
    
    1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
    2. 一般函数直接执行,内部this指向全局window
    3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象(谁调用指向谁)
    4. 构造函数中的this  对象的实例 
    
    
    for (变量 in 对象名字) {
        变量输出的是属性名
        对象[变量]输出的是 属性值
    }
    
     这个变量是自定义 符合命名规范  但是一般我们 都写为 k  或则  key
    
    后面的是对象 可以  数组     因为 数组也属于对象
    
    
    
    对象的遍历: for-in
    
      
             function Yingxiong(name,type,blood){
                 this.name = name;
                 this.type = type;
                 this.blood = blood;
                 this.singgj=function(){
                     alert('攻击');
                 }
             }
             var houyi = new Yingxiong('后裔','射手型','2333血量');
            /*  console.log(houyi.name);
             houyi.singgj();
             console.log(houyi); */
             for (var key in houyi){
                 console.log('属性名:'+key+'	 '+'值是:'+houyi[key]);
                 
             }
    
    
    1. JSON 数据的书写格式是:名称/值对。
    
    2. 里面的属性和值都要用 双引号 括起来
    
    
     var json = {
         "id": "1",
         "name": "andy",
          "age": "18",
          "tel": "110120"
     }
     for (var k in json) {
        console.log(k); // 这里的k 是属性名
        console.log(obj[k]); // 这里的 obj[k] 是属性值
    }
    
    Math.PI            // 圆周率
    Math.floor()             // 向下取整
    Math.ceil()             // 向上取整
    Math.round()        // 四舍五入版 就近取整   注意 -3.5   结果是  -3 
    Math.abs()        // 绝对值
    Math.max()/Math.min()    // 求最大和最小值
    Math.sin()/Math.cos()    // 正弦/余弦
    Math.power()/Math.sqrt()// 求指数次幂/求平方根
    
    Math.random 生成随机数
    
    function getRandom(min, max) {
       return Math.floor(Math.random() * (max - min + 1) + min);
    }
    console.log(getRandom(10, 20))
    
    
    随机背景颜色
    
    function getRandom(min, max) {
        return Math.floor(Math.random() * (max - min + 1) + min);
    }
    
    function getRandomColor() {
        var c1 = getRandom(0, 255);
        var c2 = getRandom(0, 255);
        var c3 = getRandom(0, 255);
        return 'rgb(' + c1 + ', ' + c2 + ', ' + c3 + ')';
    }
    
    window.onload=function(){
        document.body.style.backgroundColor=getRandomColor();
    }
    
    
    Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。
    // 获取当前时间,
    var now = new Date();
    console.log(now);
    
    +new 获得当前毫秒数 列如:
        
    var now = +new Date();
    console.log(now);
    
    新方法获得当前毫秒数 console.log(Date.now());
    
    
    Date构造函数的参数
    // 括号里面时间 ,就返回 参数里面的时间
    日期格式字符串  '2015-5-1'     new Date('2015-5-1')  或者  new Date('2015/5/1') 
    
    getFullYear()  
    
    获取当年               
    
             dObj.getFullYear()
    
    
    getMonth()
    
    +1      获取当月(0-11)输入数值类型要少一个月
    
                     dObj.getMonth()
    
    
    getDate()      
    
    获取当天日期                    
    
    dObj.getDate()
    
    
    getDay()
    
           获取星期几 (周日0 到周六6)
    
        dObj.getDay()
    
    
    getHours()
    
         获取当前小时
    
                        dObj.getHours()
    
    
    getMinutes()   
    
    获取当前分钟                     
    
    dObj.getMinutes()
    
    
    getSeconds()
    
       获取当前秒钟                    
    
    dObj.getSeconds()
    
    
    现在时间
    function getMyDate() {
        var arr = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
        var date = new Date();
        // 2018年5月29日 星期二 
        var str = date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日 ' + arr[date.getDay()];
        return str;
    }
    console.log(getMyDate());
    
    当前时间案列
    
    function getTimer() {
        var date = new Date();
        // var str = date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
        var h = date.getHours();
        var m = date.getMinutes();
        var s = date.getSeconds();
        // if(h < 0) {
        //     h = '0' + h;
        // }
        h = h < 10 ? '0' + h : h
        m = m < 10 ? '0' + m : m
        s = s < 10 ? '0' + s : s
        return h + ':' + m + ':' + s;
    }
    console.log(getTimer());
    
    - 计算公式:
    
      
           d = parseInt(countTime/ 60/60 /24); // 计算天数
                    d = d < 10 ? '0'+ d : d
             h = parseInt(countTime/ 60/60 %24); // 计算小时
                    h = h < 10 ? '0'+ h : h
             m = parseInt(countTime /60 %60 ); // 计算分数
                    m = m < 10 ? '0'+ m : m
             s = parseInt(countTime%60);  // 计算当前秒数 
                    s = s < 10 ? '0'+ s : s
                return '还剩下'+ d + '天' + h + '时' + m + '分' + s +'秒';
    
    d = parseInt(总秒数/ 60/60 /24); // 计算天数
    
     
    h = parseInt(总秒数/ 60/60 %24) // 计算小时
    
      
    m = parseInt(总秒数 /60 %60 ); // 计算分数
    
        
    s = parseInt(总秒数%60);  // 计算当前秒数
    
    
    
    倒计时天数:
    
    
    function getCountTime(endTime){
        var d, h, m , s;
        var countTime = parseInt((new Date(endTime)- new Date())/1000);
            d = parseInt(countTime/ 60/60 /24); // 计算天数
                    d = d < 10 ? '0'+ d : d
            h = parseInt(countTime/ 60/60 %24); // 计算小时
                    h = h < 10 ? '0'+ h : h
            m = parseInt(countTime /60 %60 ); // 计算分数
                    m = m < 10 ? '0'+ m : m
            s = parseInt(countTime%60);  // 计算当前秒数 
                    s = s < 10 ? '0'+ s : s
                return '还剩下'+ d + '天' + h + '时' + m + '分' + s +'秒';-
    }
    console.log(getCountTime('2018-10-8 12:00'));
    
    创建数组对象的两种方式
    
    - 
    字面量方式
    - new Array()
    
    
    
    instanceof     检测是否为数组
    var arr = [1, 23];
    var obj = {};
    console.log(arr instanceof Array); // true
    console.log(obj instanceof Array); // false
    console.log(Array.isArray(arr)); // true
    console.log(Array.isArray(obj)); // false
    
    筛选
    var arr = [1500, 1200, 2000, 2100, 1800];
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] < 2000) {
            newArr.push(arr[i]);
        }
    }
    console.log(newArr);
    
    升序公式sort冒泡)
    var arr = [1, 64, 9, 6];
    arr.sort(function(a, b) {
        return b - a; // 降a序
        // return a - b;   升序
    });
    console.log(arr);
    
    连接数组concat
    
    var arr1 = [1, 2];
    var arr2 = ['pink', 'red'];
    var arr3 = ['andy', 18]; 
    //返回连接之后的新数组
    console.log(arr1.concat(arr2, arr3)); 
    
            1.indexOf(要查找的字符,开始位置)  开始位置不写默认从0开始,找不到返回-1  ----查找字符
    
            2.charAt(字符位置)      给一个位置,返回该位置的字符                   ----获取字符
    
            3.subStr(开始位置,截取个数)  返回截取的字符串结果                     ----截取字符
    
            4.replace(要替换的字符,替换的新字符)                                  ----替换字符
    
            5.join(连接符)  将数组通过连接符连接,返回字符串                       ----连接字符
    
            6.split(连接符) 将字符根据连接符分割成多个值的数组,返回数组             ----分割字符
    
            7.toUpperCase()  将字符串转换为大写                                  ----转换成大写
    
            8.toLowerCase()  将字符串转换为小写                                  ----转换成小写
    
    把数字 转换字符串
    toString()
    
    把数组转换成字符串,逗号分隔每一项
    
    返回一个字符串
    
    join('分隔符')
    
    方法用于把数组中的所有元素转换为一个字符串。
    
    返回一个字符串
    
    
    var arr = ['red', 'green', 'blue', 'pink'];
    console.log(arr.join()); // 跟toString() 一样, 转换为字符串
    console.log(arr.join('-')); //red-green-blue-pink
    
    
    splice()        
    
    数组删除splice(第几个开始,要删除个数)
    
    返回被删除项目的新数组  注意,这个会影响原数组
    
    slice()         
    
    数组截取slice(begin, end)
    
              返回被截取项目的新数组
    
    concat()  合并         
    
    连接两个或多个数组  不影响原数组
    
    返回一个新的数组
    
    reverse()翻转数组        
    
    颠倒数组中元素的顺序,无参数
    
            该方法会改变原来的数组    返回新数组
    
    
    sort()
    
        升序(降序)冒泡       对数组的元素进行排序           
    
           该方法会改变原来的数组  返回新数组
    
    
    push(参数1)              末尾添加一个或多个元素 ,注意修改原数组  并返回新的长度
    pop()                     删除数组最后一个元素,把数组长度减 1  无参数、注意修改原数组  返回它删除的元素的值
    unshift(参数1...)         向数组的开头添加一个或更多元素,注意修改原数组,  并返回新的长度
    shift()                把数组的第一个元素从其中删除,把数组长度减 1 无参数、注意修改原数组,返回第一个元素的值
    
    splice()            删除某个元素 可以替换或者插入元素   插入splice(0,0,'值') splice(2,0,'值')第2中间插入 
    splice(2,1,'值') 替换元素
    
    清空数组
    var arr = [1,2,3,4,5];
    arr = [];
    
    indexOf                   查询元素位置   从左到右查询
    lastIndexOf               查询元素位置 从右到左查询
    indexOf()
    
                数组中查找给定元素的第一个索引
    
    如果存在返回索引号  如果不存在,则返回-1。
    
    
    查找全部
    var arr = ['red', 'green', 'blue', 'pink','blue'];
    var index = arr.indexOf('blue');
    while (index !== -1){
        console.log(index);
        index = arr.indexOf('blue',index + 1);
        
    }
    
    编写一个方法去掉一个数组的重复元素
    var arr=['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'];
    var newArr=[];
    for(var i = 0; i< arr.length;i++){
        if(newArr.indexOf(arr[i])=== -1){
            newArr.push(arr[i]);
        }
    }
    console.log(newArr);
    
    
    值类型当参数,传递的是复制一份,相互之间不影响
     引用类型参数,传递的是同一份地址,一个人修改, 大家都修改.
    
    后台传数据
    
    function params (url){
                var arr = url.split('?');
               // console.log(arr);
                var params = arr[1];
                //console.log(params);
                var arr1 = params.split('&');
                //console.log(arr1);  
                var o = {};
                for(var i = 0; i< arr1.length;i++){
                    //console.log(arr1[i]); 
                    var newArr = arr1[i].split('=');
                   // console.log(newArr);
                    
                    o[newArr[0]]=newArr[1];
                }
                return o ;
                
            }
            //params('http://www.itheima.com/login?name=zs&age=18');
            console.log(params('http://www.itheima.com/login?name=zs&age=18'));

    forEach遍历
    var arr1=[1,3,5,61,8];
    arr1.forEach(function(item){
    console.log(item);
    })

    
    

    // forEach遍历 箭头函数
    arr1.forEach(item=>{console.log(item)});
    arr1.forEach(item=>console.log(item))

    
    


    //each遍历
    $(function(){
    $('li').each(function(index,ele){
    console.log(this);
    // console.log(index);
    // console.log(ele);
    $(this).css({'color':"red"})
    })
    })

    
    
    
    
    

    arr1.map(function(item){
    return item*2;
    })
    console.log(arr1);

    
    

    arr1.forEach()

    
    

    Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

    </body>
    </html>
  • 相关阅读:
    将Infopath转成PDF
    调用MOSS API取document时出现out of memeory错误
    jquery dialog中mvc客户端验证无效
    Windows Service开发点滴20130622
    CentOS
    nginx
    VIM
    nodejs weixin 笔记
    nodejs mysql
    nodejs 笔记
  • 原文地址:https://www.cnblogs.com/tuziling/p/10074391.html
Copyright © 2020-2023  润新知