>  Q&A  >  본문

javascript - js 对null取属性,返回null,如何实现?

let a = {a:'1'};
a.c   ====>  正常,为underfind

let b = null
b.s    =====> 会报错 Cannot read property 's' of null

如何实现 console.log(b.s) ====> 结果依然为 null

有一个model,用户输入查询条件,我不知道model是不是空的,所以代码里会写 model.id,这时model查不到,会报错。。。。。 if(model){ model.id } 我觉这种写法不优雅

阿神阿神2768일 전709

모든 응답(9)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-11 13:15:52

    let b=null表示b是一个不存在的对象,不存在的对象哪来的属性?所以报错
    let b= {};这样b是一个空对象,b.s取空对象中不存在的属性才会输出underfind的。

    你的需求本身就是反javascript的。。

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-11 13:15:52

    这个应该实现不了,js就是这么设定的不能在 null上调用任何属性或方法
    如果硬要实现

    let b = null
    try{
        b.s
    }catch(e){
        console.log(b)
    }

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-11 13:15:52

    这个需要重写js引擎吧。。。

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-11 13:15:52

    先说说对null取属性是为了什么??

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-11 13:15:52

    有属性了。。。怎么还能叫null。。。
    硬要做的话,再取属性之前做个判断,假如b是null就直接返回null

    회신하다
    0
  • 迷茫

    迷茫2017-04-11 13:15:52

    给个默认值?

    let a = +new Date() % 2 === 0 ? { msg: 'succ' } : null
    let b = a || {}
    console.log(b.msg)

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-11 13:15:52

    The value null is written with a literal: null. null is not an identifier for a property of the global object, like undefined can be. Instead, null expresses a lack of identification, indicating that a variable points to no object. In APIs, null is often retrieved in a place where an object can be expected but no object is relevant.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-11 13:15:52

    function getProto(obj, key) {
        if(obj === null) {
            return null;
        }
        return obj[key]
    }
    

    회신하다
    0
  • 黄舟

    黄舟2017-04-11 13:15:52

    用try catch吧。js的假值有点多,不过貌似就用if()判断已经比较优雅了。

    회신하다
    0
  • 취소회신하다