js这个函数的理解?

function Route(method, path, callbacks, options) {
  options = options || {};//左边的options和右边的options不一样的吧?
  this.path = path;
  this.method = method;
  this.callbacks = callbacks;
  this.regexp = utils.pathRegexp(path
    , this.keys = []
    , options.sensitive
    , options.strict);
}
阅读 2.6k
6 个回答

先反对上面 theWalker答案里面 全局创建变量。

//左边的options和右边的options不一样的吧?

先解释这句话, 是一样的,都是这个func里面局部变量。

这里作用前面说到了,就是初始化变量,为什么这么做,为了减少下面的判断,后者说是为了保证一些基本逻辑能执行。

例如这里如果不写 options = options || {}

那么当你执行 Route(1,2,3)的时候

就会报错

报错的地方在 options.sensitive options.strict

Cannot read property 'sensitive' of undefined

你可以试试。

 options = options || {};

这是一种初始化变量的方式了。
比如:

function test(num){
    num = num || 1;
    console.log(num);
}

如果你是test(2),那就没啥。
但如果你是 test(),num就没内容了吧,这时候就会变成num=1;
这里有个 短路逻辑 的知识点。题主应该知道的吧0.0

一样的。赋值操作,用于设置默认值,有值直接取options,没值取{}

一样的,同一个变量,只不过如果会进来的 options 可以判为 false 的时候会把 {} 赋给 options,也就是对变量重新赋值

我最初学习js也是很多疑点,毕竟c/c++在这里是只会返回true或者false,但是,js这里是如果第一个为真,||就返回第一个元素,如果第一个不为真,就返回第二个元素,注意,是整个元素,不是true或false,不管第二个逻辑上为真或假,如果有更多元素,则同理,因为不管它是什么,结果都跟它一致,比如说0||1||{},第一个为0,所以看第二个,第二个为1,好了,返回1,因为||是有真则真,全假则假,现在有一个为真,后面不管是什么,结果都为真了,同理0||{}||1则返回的是{},它是一个js的Object的实例,同理&&会遇到假就返回,不管后面是什么,比如0||{}返回0,有点啰嗦,但是希望你懂,这就是短路逻辑,这个方式经常用来初始化变量,就像你上面的写法,还有一种用法是可以替代if或者三元表达式,比如if(expression){x=1;}可以写成expression && (x=1);灵活运用,但是个人觉得为了好维护,最好还是用if

这就是个JS的类的构造函数.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题