zoukankan      html  css  js  c++  java
  • []-()-{}

    [],{},()的问题

    主要探究这三个的区别

    /[/]

    var o = {
        wid:100,
        say:function(){
            console.log('hello')
        }
    }
    console.log(o['wid']===o.wid);//true
    o['say']();//hello
    

    在变量中可以使用[]包裹字符串的形式获取对象的某个属性或者调用方法。
    同样也可以设置方法或者属性。

    o['no'] = function(){
        console.log('what?')
    }
    o['no']();//what?
    

    可以用作函数的参数传达:

    //调用某对象的某方法
    var x =(ele,func)=>{
        console.log(ele[func]());
    }
    x(o,'say')//hello
    

    []的语义
    1.声明数组;
    2.取数组成员;
    3.定义对象成员;
    4.取对象成员;

    ()

    ()的语义
    1.函数声明时参数表;
    2.与一些语句联合使用以达到限定作用;

    for(var i in obj){}
    if(bool){}
    while(bool){}
    do{}while(bool)
    //与if,while连用时小括号将其中结果转换成布尔型,即隐式转换。
    

    3.与 new一起传实参;
    4.作为函数或者方法调用运算符;
    5.强制表达式运算

    //匿名函数自执行
    (function(){})()
    //json用eval解析
    function strToJson(str){ 
         // eval 中字符串两旁加了强制运算符() 
         var json = eval('(' + str + ')');  
         return json; 
    } 
    //typeof 
    typeof (null)//'object'
    typeof (function(){return undefined}())//'undefined'
    typeof (function(){return undefined})//'function'
    

    {}

    {}的语义
    1.组织复合语句

    if(){}else{}
    for(){}
    

    2.对象声明
    3.声明函数或者函数表达式
    4.异常处理

    try { 
        //... 
    }catch( ex ){ 
        //... 
    }finally{ 
        //... 
    } 
    

    5.特殊结构

    function(){}()//error
    {}.constructor//error
    [].constructor//function Array(){}
    

    为什么可以获取数组的构造,无法获取对象的构造函数呢?

    var x = {}.constructor  //function Object(){}
    

    添加一个变量就可以了,其实主要原因还是js的“语义优先”。

    function(){}()//{}()被认为是复合语句,而function()缺少定义报错 。
    {}.constructor被认为是复合语句,点运算符没有对象自然报错。
    

    因此,加上强制运算符就可以解决问题:

    ({}).constructor
    
    !function(){console.log('iifksp')}()
    

    有很多运算符都可以完成这个效果:
    ! + - new void ~
    注意:function没有返回值时默认返回undefined,所以以上会被隐式转换,获得结果对应返回值

  • 相关阅读:
    Sqlserver 迁移数据库批量迁移作业(Job)
    在VS2010开发的MVC3 应用程序中设定默认的浏览器
    创建继承自System.Web.UI.WebControls.WebControl基类的控件类
    遍历页面控件
    @fontface
    加密配置节点
    视图状态的程序分块
    BlogEngine.NET 1.5的BlogProvider、DbBlogProvider
    避免target特性
    SCOPE_IDENTITY、IDENT_CURRENT 、@@IDENTITY
  • 原文地址:https://www.cnblogs.com/mydia/p/6666876.html
Copyright © 2011-2022 走看看