• js ECMAscript(二)作用域,预解析,创建对象,内置对象


    录:

     1、作用域
     2、预解析 
     3、创建对象的三种方式
     4、访问对象属性和方法的方式
     5、json格式的数据及遍历
     6、简单类型和复杂类型,参数传递
     7、内置对象
     8、js的Math对象
     9、js的String对象
    10、js的Araay对象
    11、js的Date对象

    1、作用域    <--返回目录

      块级作用域:一个大括号可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用。

      全局变量:用var声明的变量,可以在任何地方使用

      局部变量:在函数内部定义的变量

      隐式全局变量:声明的变量没有var。全局变量是不能被删除的,隐式全局变量可以被删除。

    {
        var a = 10;
        console.log(`a=${a}`); // 10
    }
    console.log(`a=${a}`); // 10
    
    {
        const b = 10;
        console.log(`b=${b}`);
    }
    //console.log(`b=${b}`); // b is not defined
    
    {
        let c = 10;
        console.log(`c=${c}`);
    }
    //console.log(`c=${c}`); // c is not defined

      if块

    if (false) {
        var b = 20;
    }
    console.log(`b=${b}`) // b=undefined
    
    if (true) {
        var c = 20;
    }
    console.log(`c=${c}`) // c=20

      方法内定义的变量

    function fun () {
        var a = 10;
        console.log(`fun方法内打印a的值,a=${a}`)
    }
    fun()
    //console.log(`fun方法外打印a的值,a=${a}`) // a is not defined

      隐式全局变量

    /* 全局变量是不能被删除的,隐式全局变量可以被删除 */
    var a = 10
    delete a
    console.log(`a=${a}`) // a=10
    
    b = 20
    console.log(`b=${b}`) // b=20
    delete b
    console.log(`b=${b}`) // b is not defined
    /* 函数调用后,函数内没有加var声明的变量被提升为隐式全局变量 */
    function fun () {
        a = 10
        var b = 20
    }
    // console.log(`a=${a}`) // a is not defined
    // console.log(`b=${b}`) // b is not defined
    
    fun()
    console.log(`a=${a}`) // a=10
    console.log(`b=${b}`) // b is not defined

    2、预解析  <--返回目录

    /* 把变量的声明提前到当前作用域最前面 */
    console.log(a) // undefined
    var a = 10
    
    // 上面代码相对于
    var a
    console.log(a)
    a = 10
    /* 把函数的声明提前到当前作用域最前面 */
    fun()
    function fun() {
        console.log('调用fun()')
    }

    3、创建对象的三种方式    <--返回目录

      第一种:调用系统的构造函数创建对象

    var obj = new Object();        
    obj.name = "小明";//添加属性
    obj.age = 20;
    obj.sex = "男";
    obj.eat = function() {  //添加方法
        console.log("吃饭");
    };
    
    console.log(obj.name);//获取对象的属性
    obj.eat();//调用对象的方法

      如何一次性创建多个对象?把创建对象的代码封装在一个函数中,即工厂模式创建对象(结合第一种和需求通过工厂模式创建对象)

    function createObject(name, age) {
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.sayHi = function() {
            console.log("hello,我叫" + obj.name);
        }
        return obj;
    }
    
    //创建一个对象
    var per1 = createObjcet("张三",10);
    per1.sayHi();

      

      第二种:自定义构造函数创建对象

      自定义构造函数创建对象(创建出来的对象可以知道其类型)
           函数与构造函数的区别:名字首字母是否大写

    function Person(name, age){
        this.name = name;
        this.age = age;
        this.sayHi = function(){};
    }
    
    var obj = new Person("lisi", 20);
    console.log(obj.name);
    console.log(obj instanceof Person); // true
    console.log(obj instanceof Object); // true

      当代码var obj=new Person("lisi",20);执行时,做了4件事
                ** 在内存中开辟空间 ,存储创建的对象
                ** 把this设置为当前的对象
                ** 设置对象的属性和方法
                ** 把this这个对象返回

      第三种:字面量的方式创建对象

    var obj = {}; // 定义一个对象
    obj.name = "zs";
    obj.sayHi = function() {};
    
    // 优化后的写法:
    var obj2 = {
        name: "lisi",
        age: 20,
        sayHi: function(){
            alert("hi,我叫" + this.name);
        }
    };
    obj2.name = "zhangsan";
    obj2.sayHi(); // 调用对象的方法

    4、访问对象属性和方法的方式    <--返回目录

    function Person(name, age) {
        this.name = name;
        this.age = age;
        this.play = function() {};
    }
    var obj = new Person("zs", 20);
    console.log(obj.name); // 访问对象的属性
    console.log(obj["name"]); // 访问对象的属性
    obj.play(); // 调用对象的方法
    obj["play"](); // 调用对象的方法

    5、json格式的数据及遍历    <--返回目录

       json格式的数据:成对的键值对

    var json = {
        "name": "xiaoming",
        "age": "10"
    };
    alert(json.name);
    alert(json["name"]);

      通过for-in循环遍历

    for(var key in json){
        console.log(json[key]);
    }

    6、简单类型和复杂类型,参数传递    <--返回目录

      js原始数据类型:number, string, boolean, undefined, null, object

        基本类型(简单类型), 值类型: number, string, boolean

        复杂类型, 引用类型: object

        空类型: undefined, null

      值类型在内存中存储位置:栈

      引用类型在内存中存储位置:对象在堆中存储,地址在栈中存储

      值类型和引用类型的参数传递:值类型传值,引用类型传地址(对象的引用)

    7、内置对象    <--返回目录
      js学习的三种对象
            - 内置对象: Math、Date、String、Array、Object等
            - 自定义对象
            - 浏览器对象--BOM
            
      如何验证变量是不是对象?

    console.log(Array instanceof Object);//内置对象,true
    var obj={};//自定义对象
    console.log(obj instanceof Object); // true  

    8、js的Math对象    <--返回目录
        * 数学的运算。Math里面都是静态方法,直接通过Math.方法使用
        * 方法
            - ceil(): 向上取整
            - floor():向下取整
            - round(): 四舍五入
            - random(): 得到随机数[0-1)  Math.floor(Math.random*10)得到0-9随机整数
            - pow(m,n): m的n次方
        * 属性 PI

    9、js的String对象    <--返回目录
        * 创建String对象 var str="abc";
        * 属性length:字符串的长度  document.write(str.length);
        * 方法
        (1)与html相关的方法
            - bold():加粗
            - fontcolor("red"):设置字体颜色
            - fontsize("1-7"):设置字体大小  
            - sub(),sup():下标,上标
            - link("a.html"):将字符串显示成超链接
            
        (2)与java相似的方法
            - str1.concat(str2):连接字符串
            
            - str.charAt(1):返回指定位置的字符,如果索引超出,返回空字符
            
            - str.indexOf("a"):返回字符的索引位置,不存在,返回-1。
                ** str.indexOf("")  返回0
                
            - split():切割字符串,成字符数组
                ** var str = "a-b-c";
                   var arr1=str.split("-");//['a','b','c']
                   document.write(arr1.length);
                   
            - replace(旧字符串oldStr或正则表达式regexp,新字符串newStr):替换字符串,并返回替换后的字符串
                ** 如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

                ** var str="helloworldhello";
                    console.log(str.replace("hello","您好"));//您好worldhello,只替换第一个匹配的
                    console.log(str.replace(/hello/g,"您好"));//您好world您好,替换所有匹配的
                   
            - substr(start,[length]):从起始索引号提取字符串中指定数目的字符。
                ** 参数length:可选。子串中的字符数。必须是数值。如果省略了该参数,如果没有指定 lenght,
                   那么返回的字符串包含从 start 到 stringObject 的结尾的字符。
                
            - substring(索引start,[索引end]):包左不包右,提取字符串中两个指定的索引号之间的字符。
                ** 如果省略第二个参数end,那么返回的子串会一直到字符串的结尾
            
    10、js的Araay对象    <--返回目录
        * 创建Array对象
            - var arr = new Array(1,2,3);
            
        * 属性length:数组长度
        
        * 方法
            - arr1.concat(arr2):数组的连接
            - join():根据指定字符分割数组,组成字符串
                ** var arr1 = [a,b,c];
                   arr.join("-");
                   docment.write(arr);//a-b-c
            - push():向数组末尾添加元素或数组,返回新数组的长度(把数组整体当成一个元素)

            - pop():删除最后一个元素,并返回此元素 arr.pop()
            - reverse():将数组顺序颠倒                    

    11、js的Date对象    <--返回目录
        * 获取当前时间 var date =new Date();
            - 将date转换为本地格式 date.toLocaleString()
                ** var date = new Date();
                    console.log(date);//Thu Jun 28 2018 11:18:40 GMT+0800 (中国标准时间)
                    console.log(date.toLocaleString());//2018/6/28 上午11:19:28
            - 获取当前年 date.getFullYear()
            - 获取当前月(返回0-11) 【date.getMonth()+1】  
            - 获取当前星期(返回0-6) date.getDay()  星期日----0
            - 获取当前天(返回1-31) date.getDate()
            - 获取当前小时(返回0-23) date.getHours()
            - 获取当前分钟(返回0-59) date.getMinutes()
            - 获取当前秒(返回0-59) date.getSeconds()
            
            - getTime():获取从1970年一月一日至今的毫秒数
                * 应用场景:使用毫秒数处理缓存的效果(没有缓存)http://www.baidu.com?毫秒数

        * 数组的月份6,改成06

    var date = new Date();
    console.log(date);//Thu Jun 28 2018 11:18:40 GMT+0800 (中国标准时间)
    console.log(date.toLocaleString());//2018/6/28 上午11:19:28
    var m = (date.getMonth()+1) + "";//date.getMonth()返回number类型
    
    if(m.length==1){
        m = '0' + m;
    }
    alert(m);//06
  • 相关阅读:
    C#-黑客-数据库访问-字符串的攻击和防御
    C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看
    C#把datetime类型的日期转化成年月日或其他格式方法总结
    C#—类库、委托、is和as运算符、泛型集合
    C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)
    C#-面向对象的三大特性——继承
    C#-面向对象——如何调用使用类 普通方法、静态方法的使用
    C#-面向对象的三大特性——封装(封装成员变量、封装成员方法)
    面向对象的封装、继承、多态
    如何在HTMl网页中插入百度地图
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/12181715.html
Copyright © 2020-2023  润新知