首页 > 写js函数时候碰到了错误。和参数有关系的,搞不明白。

写js函数时候碰到了错误。和参数有关系的,搞不明白。

情况1的代码:

var s  =function(options){
    options || options = {}
}

s();

情况1的结果:

Uncaught ReferenceError: Invalid left-hand side in assignment

情况2的代码:

var s = function(options){
    if(!options){
        options = {};
    }
    console.log(options);
}

s();

情况2的结果:

Object {}

这两种情况为啥不是都能用啊?感觉功能相似。
到底哪里错了啊?


情况一的问题在于运算符优先级,我们先来看看文档是怎么说的:

从表格里看到,逻辑运算符||的优先级要比赋值运算符=的优先级高,所以运算的行为实际是这样的:

(options || options) = {}

(options || options)运算后的结果是一个boolean值的结果,并且是一个"左值"(即:不可被赋值的数据),于是当你想把{}赋值给她时,就报错了。


 var options = options || {};

提示已经说的非常清楚了,等号左边的值无效。
实际上情况1的代码等价于:

(options || options)={};

等号左边的运算结果没有对象空间,因此其不可写,自然无法赋值喽。
正确的写法应该手动指定运算结果存储位置:

options=options||{};

options || (options = {})
或者
options = options || {}
或者

if(!options){
    options = {};
}
【热门文章】
【热门文章】