如何打印参数';javascript中的列表?
有没有办法在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,并且只有结果作为参数传递到函数调用中。嗯。。。在这里,我将为您搜索它:) 正如其他一些人指出的,通
在函数
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);
}
}