• Javascript知识汇总------js中容易被忽略的细节(持续更新)


    • in运算符

        语法:boolean       “name” in Object 判断对象是否具有某一个属性
    var myObject = {name:'吴小碎'};
    console.log('name' in myObject); //true   返回值为true表示myObject中存在name属性
    console.log('age' in myObject); //false   返回值为false表示myObject中不存在name属性
    • new运算符 和 直接量(字面量)

    var objONE = {};   //直接量(字面量)生成对象
    var objTWO = new Object();   //new运算符生成对象
    • 引用类型 和 值类型

    值类型赋值不会改变原始数据
    引用类型在内存中是一个,值改变会改变以前的数据
    var num1 = '13';
    var num2 = num1;
    num2 = '23';
    console.log(num1)   //13   改变值num2的值num1并未改变,证明num1与num2在空间分别占有自己的内存,是两个独立的个体
    console.log(num2)   //23   
    console.log(num1 == num2);   //false  这里是值引用比较,故只比较值是否相同
    
    var obj1 = {name:'吴小碎',age:18};
    var obj2 = obj1;
    obj2.sex = '男'
    console.log(obj2);   // {name: "吴小碎", age: 18, sex: "男"}
    console.log(obj1);   // {name: "吴小碎", age: 18, sex: "男"}  当增加obj2属性时,obj1随之改变
    console.log(obj1 == obj2);   //true   引用类型公用一个内存,相当于obj2是obj1的桌面快捷方式,obj1和obj2指向同一内存路径
    • delete

    1. 删除数组中的一个元素
    2. 对象的属性或者方法
    3. 删除一个没有用var 的变量声明
    var arr1 = [1,2,3,4]
    delete arr1[0]
    console.log(arr1);  // [empty, 2, 3, 4] 长度不变,只是删除其中的值
    
    var obj = {name:'吴小碎',age:18};
    delete obj.name
    console.log(obj)   //{age: 18}   删掉键值对
    
    var a1 = 'test';
    delete a1;
    console.log(a1); //test  变量a1还存在,a1未被删除
    
    a2 = 'test';
    delete a2;
    console.log(a2)   //Uncaught ReferenceError: a2 is not defined  证明已经删除变量a2
    • 报错处理方法

      try{  可能出现错误的代码  } catch(e) {   e->接收的错误信息   }finally{   无论怎样都会最后执行   }
    try {
        //可能出现错误的代码
        //1.
          obj.name;  //系统报错信息->obj is not defined
        //2.
        //throw new Error('我是错误信息');   //强行扔出报错信息  
    } catch (error) {
        //如果出错执行  error->try抛出的错误信息
        console.log(error); //ReferenceError: a is not defined
    } finally {
        //无论怎样都会最后执行
        console.log('最终执行我了吗?');   //最终执行我了吗?
    }
    •  js执行: 预解析(函数,和var) , 一句一句执行

    解析顺序:scirpt代码块  ->  解析执行环境  ->  var || function (function优先级高于var)
    <script>
        console.log(msg);//与下方msg定义变量存在于两个代码块故:Uncaught ReferenceError: msg is not defined
    </script>
    <script>
        var msg = '吴小碎'
    </script>
    
    <script>
        console.log(msg);   //msg在上一个代码快解析完成,所以打印出:吴小碎
        console.log(msg1);  //与msg1存在与同一个代码块,解析执行环境存在在一个script代码块内所以:undefined
        var msg1 = '吴小碎'
    </script>
    • 表达式

    凡是将数据和运算符等联系起来有值的式子就是表达式
    • 语句

      表达式+分号

    • 对象的创建方法

      literal(字面量创建)

     var o1 = {name : 1, age : 20}

    initializer非字面量创建

    function Person (){
        this.name = 'jim'
    }
    Person.prototype.show = function (){console.log('我被执行了')}
    var o2 = new Person();
    //new 实现
    Person.call(o2);//将属性添加至o2中
    o2.__proto__ = Person.prototype; //将原型属性添加至o2中
    
    var o3 = Object.create(null); //若参数为空则输出一个空对象,也不存在__proto__属性
    var o3 = Object.create(Person); //将Person自身所有属性附加到o3的__proto__属性中也包括它的prototype属性
    var o3 = Object.create(Person,{  //第一个参数作为o3对象的__proto__来使用,后面的对象当作o3属性使用
        size: {
            value: "large",
            enumerable: true //可列举的
        },
        shape: {
            value: "round",
            enumerable: true
        }
    });

    将伪数组转换成数组的方法

    var args = Array.prototype.slice.call(arguments);
    var args = [].slice.call(arguments, 0);
  • 相关阅读:
    mysql是如何启动的?
    qt终于安装成功
    随笔
    博客首写
    为什么你预约不了政府特供口罩-太难了
    jQuery 选择器(转)
    [JS]Cookie精通之路
    存储过程分页 简单列子
    泛型集合List<T> Dictionary<K,V>
    数据绑定控件
  • 原文地址:https://www.cnblogs.com/iwzyuan/p/8698518.html
Copyright © 2020-2023  润新知