【问题标题】:Meaning of --> if (typeof options === 'string' && methods[options])--> if (typeof options === 'string' && methods[options]) 的含义
【发布时间】:2018-05-08 23:43:41
【问题描述】:

谁能解释一下是什么表达方式

方法[选项]

在此代码中进行评估?

$.fn[插件名] = 函数(选项){

    if (typeof options === 'string' **&& methods[options])** {
        alert("Mirko in");
        var inited = TRUE;
        this.each(function() {
            if (!$(this).data(pluginname)) {
                return inited = FALSE;
            }
        });

这个表达式什么时候是真的?我认为在 javascript 中你没有关联数组。

有关信息: - 方法只是一个对象类型(--> var methods = {method1: function()..., method2: function ()...} - options 也是一个对象,用来自定义插件。

谢谢

【问题讨论】:

  • methods[options] 将评估为true,当methods 对象包含一个属性名称为options 中的任何值时。例如,如果methods = { 'foo': .... },则methods['foo'] == true,但methods['bar'] === false
  • 当参数 options 具有字符串类型并且 methods 对象具有 options 作为键时为真。如果 options 不是键,则表达式的值为 undefined,因此整个表达式为 false。
  • 感谢您的澄清!

标签: javascript jquery plugins


【解决方案1】:

methods[options] 访问方法对象中与一个键相关联的值,该键等于options 变量的字符串值。如果一个真值存储在那里,它将返回真。例如,

  var methods = {yes: 'hello'}
  var options = 'yes'
  (typeof options === 'string' && methods[options]) //evaluates as true

  options = 'no'
  (typeof options === 'string' && methods[options]) //evaluates as false 

第二个评估为假,因为methods['no'] 返回undefined。但是,在您的问题中,您说options 是一个对象- 如果始终为真,那么布尔值typeof options === 'string' 的前半部分将始终为假,并导致整个表达式为假。我想该插件提供了为options 传递字符串或对象值的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2020-06-05
    • 2021-07-09
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多