Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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 - Fatal编程技术网

如何打印参数';javascript中的列表?

如何打印参数';javascript中的列表?,javascript,Javascript,有没有办法在JavaScript中完整或部分打印参数列表 示例: 在函数my_assert(a!=b)中,我想打印a=b,甚至2=3用于特定函数调用。您不能a=b首先执行,并且只有此操作的结果(true或false)被赋予函数,因此您没有机会返回a=b或2=3 console.log (arguments) 将打印给定给函数的参数,但在您的示例中,函数看到的都是布尔值,因为a!=将首先计算b,并且只有结果作为参数传递到函数调用中。嗯。。。在这里,我将为您搜索它:) 正如其他一些人指出的,通

有没有办法在JavaScript中完整或部分打印参数列表

示例:
在函数
my_assert(a!=b)
中,我想打印
a=b
,甚至
2=3
用于特定函数调用。

您不能<代码>a=b首先执行,并且只有此操作的结果(
true
false
)被赋予函数,因此您没有机会返回
a=b
2=3

 console.log (arguments)

将打印给定给函数的参数,但在您的示例中,函数看到的都是布尔值,因为
a!=将首先计算b
,并且只有结果作为参数传递到函数调用中。

嗯。。。在这里,我将为您搜索它:)


正如其他一些人指出的,通过测试(a!=b)只会得到一个布尔值(true | false)作为参数。但是如果调用myAssert(a,b),则可以根据我粘贴的链接中的建议计算参数并测试它们的相等性,以及打印它们的值。

您不能这样做。当您有以下行时:

my_assert(a!=b);
表达式
a=b
将首先进行计算,其结果将传递给
my\u assert

假设您的
my_assert()
函数专门用于您自己的测试,并且您可以控制它的工作方式和传入内容,您可以执行以下操作:

my_assert(a!=b, "a!=b");
也就是说,向函数传递一个额外的参数,该参数带有测试内容的字符串表示形式。显然,这并不能阻止您意外地说
my_assert(a!=b,“a==b”),而且很笨重,但我想不出其他方法来做。

给你:

my_assert = (test) ->
    str = my_assert.caller.toString()
    match = /return my_assert\((.*)\)/.exec str
    console.log match[1], test

a = '1'
b = '2'
do -> my_assert(a!=b)
do -> my_assert(b!=a)


> a !== b true
> b !== a true 

唯一需要注意的是,为了能够可靠地获取断言调用的源代码,您必须从单独的匿名函数调用
my_assert
调用

在CoffeeScript中,使用
do->
表示法并不坏

在JS中这是:
(function(){my_assert(a!=b)})()

您可以通过如下函数的测试:

my_assert->a=b


my_断言(函数(){a!=b})

或者更确切地说是
assertNotEqual(a,b)
Good point@Thilo,尽管这仍然不会让assert函数知道传入的变量的名称。显然,在我的回答中,我考虑的更多的是一个
断言(anyexpression)
。为什么这个答案没有真正解决所问的问题,反而指出了一个甚至没有那么多语法的问题中的语法错误,却得到了3票?诚然,这是一个有用的提示,但我看不出它是多么值得作为“最佳”答案投票,因为它实际上根本不是一个。@GeniaS。。。它直接解决了运营商的担忧。。。他们希望从var的a和b中获取值,而不是传入的值。阅读问题时的微妙变化…我在谷歌上搜索了一下,最后来到这里。。。还不错,是吗?:)

//
// A variation on vaughan's answer, from Oct 1 '13
// Includes simple unit test to debug the regex for multiline assert expressions
// Use console.error and/or 'throw new Error' depending how you handle errors
//
function test_assert() {
  try {
    (function () { assert(3 === 'a') })();

    (function () {
      assert('foo' !== 'bar')
    })();

    (function () {
      assert('foo' ===
        'bar')
    })();
  } catch (e) {
    console.error(e.stack)
  }
} // test_assert

function assert(expression) {
  if (!expression) {
    let caller = assert.caller.toString()
    let test = caller.match(/assert[^]*\)/)
    //throw new Error(test[0] + ' failed');
    console.error('%s failed', test[0])
  }

} // assert

/////////////////////////////////
// Here's a simple assert()

function assert2(condition, message) {
  if (!condition) {
    console.error('assert (%s) failed: "%s"', condition, message)
    throw new Error("Assertion failed: " + message);
  }
}