Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个Javascript函数返回什么?_Javascript_Expression - Fatal编程技术网

这个Javascript函数返回什么?

这个Javascript函数返回什么?,javascript,expression,Javascript,Expression,该功能可在本网站上找到: input.peek()确实返回某种类型的令牌对象。但是最终返回的是什么Truefalse还是对象本身? 为什么tok在返回表达式中出现两次,一次出现在返回表达式的开头,第二次出现在返回表达式的结尾?它返回对象,或者返回false tok在表达式中出现两次,因为一些讨厌其他人能够读取其代码的smarty pants开发人员需要能够在最后返回tok,并计算它的.value属性 这里有一个合理的重写,以便除原始开发人员以外的所有人都可以阅读: function is_op(

该功能可在本网站上找到:

input.peek()确实返回某种类型的令牌对象。但是
最终返回的是什么
True
false
还是对象本身?
为什么
tok
在返回表达式中出现两次,一次出现在返回表达式的开头,第二次出现在返回表达式的结尾?

它返回对象,或者返回false

tok
在表达式中出现两次,因为一些讨厌其他人能够读取其代码的smarty pants开发人员需要能够在最后返回
tok
,并计算它的
.value
属性

这里有一个合理的重写,以便除原始开发人员以外的所有人都可以阅读:

function is_op(op) {
    var tok = input.peek();
    return tok && tok.type == "op" && (!op || tok.value == op) && tok;
}
同时

开发人员本可以写这行:

//if tok is false
if(!tok) {
  return false;
}

if(tok.type !== 'op') {
  return false;
}

//if op is defined and tok.value is not the same as op
if(op && tok.value != op) {
  return false;
}

//tok.type == 'op' and tok.value == op, if it was defined
return tok;
这样他就不必检查
tok
一开始是否为false-y:

var tok = input.peek() || {};

但是一个纯粹主义者也会说行(
input.peek()|{}
)也不必要地分配了一个对象….

它返回对象,或者返回false

tok
在表达式中出现两次,因为一些讨厌其他人能够读取其代码的smarty pants开发人员需要能够在最后返回
tok
,并计算它的
.value
属性

这里有一个合理的重写,以便除原始开发人员以外的所有人都可以阅读:

function is_op(op) {
    var tok = input.peek();
    return tok && tok.type == "op" && (!op || tok.value == op) && tok;
}
同时

开发人员本可以写这行:

//if tok is false
if(!tok) {
  return false;
}

if(tok.type !== 'op') {
  return false;
}

//if op is defined and tok.value is not the same as op
if(op && tok.value != op) {
  return false;
}

//tok.type == 'op' and tok.value == op, if it was defined
return tok;
这样他就不必检查
tok
一开始是否为false-y:

var tok = input.peek() || {};

但是一个纯粹主义者也会说,行(
input.peek()|{}
)也不必要地分配了一个对象….

如果令牌(AST节点)是操作类型(缩写为“op”)并且它匹配传入的操作类型(参数
op
),那么函数的目的就是返回令牌本身

如果没有传入
op
参数,该函数只会检查令牌是否为任何类型的“op”

如果不满足条件,则返回false

tok
添加到布尔表达式末尾的原因是返回
tok
而不是true,这是满足所有条件时最后一次计算的结果

这是一个更可读的版本

//if toke.type is 'op' and tok has a non-false-y value that is equal to op, return it
return tok.type == 'op' && (!op || tok.value == op) && tok.value == op && tok;
由于在函数(
input
)中使用globals是一种不好的做法,而且函数名是xxx,应该返回一个布尔值,因此我会重新编写函数以返回一个布尔值,然后传入标记。然后这个表达看起来更容易理解

function is_op(op) {
    var tok = input.peek();

    if (!tok || tok.type !== "op") {
       return false;
    }
    if (op && tok.value !== "op") {
       return false
    }
    return tok;
}
那么调用方就已经有了对令牌的引用

function is_op(tok, op) {
   return tok && tok.type == "op" && (!op || tok.value == op);
}

如果令牌(AST节点)属于操作类型(缩写为“op”),并且它与传入的操作类型(参数
op
匹配),则函数的目的是返回令牌本身

如果没有传入
op
参数,该函数只会检查令牌是否为任何类型的“op”

如果不满足条件,则返回false

tok
添加到布尔表达式末尾的原因是返回
tok
而不是true,这是满足所有条件时最后一次计算的结果

这是一个更可读的版本

//if toke.type is 'op' and tok has a non-false-y value that is equal to op, return it
return tok.type == 'op' && (!op || tok.value == op) && tok.value == op && tok;
由于在函数(
input
)中使用globals是一种不好的做法,而且函数名是xxx,应该返回一个布尔值,因此我会重新编写函数以返回一个布尔值,然后传入标记。然后这个表达看起来更容易理解

function is_op(op) {
    var tok = input.peek();

    if (!tok || tok.type !== "op") {
       return false;
    }
    if (op && tok.value !== "op") {
       return false
    }
    return tok;
}
那么调用方就已经有了对令牌的引用

function is_op(tok, op) {
   return tok && tok.type == "op" && (!op || tok.value == op);
}

op
未定义时,我不认为您的第一个代码是等价的
(!op | | tok.value==op)
@JuanMendes-op从未显示
op
的定义位置,因此我假设它是在上面某个地方定义的,可能通过
var op使用
undefined
的值
op
是传递到函数中的参数,如果您不传入它,它就不必检查
tok.value==“op”
如果
op
未定义,我认为您的第一个代码是不等价的
(!op | | tok.value==op)
@JuanMendes-op从未显示
op
的定义位置,因此我假设它是在上面某个地方定义的,可能通过
var op使用
undefined
的值
op
是传递到函数中的参数,如果不传入,则不必检查
tok.value==“op”
是否返回第一个伪值或最后一个伪值。例如,如果
tok
是falsy,它将返回该值。如果
tok.type==“op”
false
,它将返回该值,以此类推。它将返回第一个假值或最后一个真值。例如,如果
tok
是falsy,它将返回该值。如果
tok.type==“op”
false
,它将返回该值,以此类推。