JS 对象字面量解析

111 阅读2分钟

JavaScript 基础与面向对象编程

数据类型概览

  • 字符串(string)
  • 数值(number)
  • 布尔值(boolean)
  • 空值(null)
  • 未定义(undefined)
  • 对象(object)

变量与类型推断

let a;//a会是什么类型呢?
console.log(a);

实际上这里的a是undefined

这是因为js本身是一门弱类型的语言,变量的类型由值决定->甚至可以通过赋值操作改变类型

  • a=1时 a就成为了Number类型
  • a='hello'时 a又变成了string类型
  • 当我们对已经赋值过的变量进行其他类型的赋值可以改变它的类型

image.png

对象字面量与数组

  • 对象字面量:{}
  • 数组:[]
  • js提供了对象(object)字面量(字面意思上就知道是哪个对象)

面向对象编程

简单对象构造

  • 对象由属性和方法构造
 let zs={
        name:'张三',
        hometown:'上海',
        talk:function(){
            console.log('hello');
            
        }
      }

复杂关系建模和设计模式实践

  • 人际关系模拟
  • 属性与方法设计
  • 代理模式(Proxy)

用下面这个代码简单实现一个实际中的代理模式
ps:小李送花给小李,但是他不好意思,所以拜托小红帮他转交给小美


<body>
    <script>
        let xl={
            name:"小李",
            sendFlower:function(target){
              target.receiverFlower(xh);
            }
        }
        let xm={
            xq:30,
            name:'小美',
            receiverFlower:function(sender){
                if(this.xq<80){
                    console.log('不约');
                }
                else{
                    console.log('ok');
                }
                
            }
        }
        let xh={
           name:'小红',
            receiverFlower:function(sender){
            //一段时间后给小美
                setTimeout(function(){
                    xm.xq=90;
                    xm.receiverFlower(sender);
                },3000)
            }
        }
    
     
    </script>
</body>

面向接口编程

  • 灵活性与可扩展性
上面的案例中小美和小红都有收到花的行为,于是我们可以实现这个接口,这样代码就实现了复用,更加方便灵活

null 与 undefined 的区别

  • undefined:未赋值或不存在的属性
  • null:显式赋值的空值
//null 和unnudefined
//变量声明了但没赋值,;类型无法确定,是undfined
//或对象属性/数组元素不存在时,JS自动给undfined
//JS 弱类型语言
let a ;
console.log(typeof a);
a=1;//变量的类型由值决定

console.log(typeof a);
let obj={
    name:'张三'
}
console.log(obj.friend);

//null 表示一个空值
//有值
//主动赋值给变量,表示这个值是空的
let b ='原有的值';
b=null;