Calling toString() on the function below returns different strings across browsers. I understand this is because ECMA-262 15.3.4.2 leaves wiggle room for each vendor.
Chrome returns the comments in addition to all syntax. Sadly Firefox 3.6 omits the comments. Based on Firefox's behavior I haven't tested IE, Opera, or Safari.
function foo() {
/* comment */
var bar = true;
}
Specifically, I am attempting to embed meta data within a specially formatted comment block within a function. Later the return value of the functions toString() method would be parsed and values returned as an object.
I've been unable to locate compatibility tables or alternatives to toString(). Does the community have any ideas? Btw, pre-processing JS files isn't an option. :(
Thanks a lot. :)
Although not as direct as embedding comments, since functions are first-class objects in JS, you can specify arbitrary properties for them. E.g.:
> function f(x) { return x * x; }
undefined
> f
function f(x) { return x * x; }
> f.comment = 'Hello'
Hello
> f.comment
Hello
This way you can embed metadata into function objects cleanly and portably.
I was trying to answer this question recently, and came across this. To provide an update, I was still unable to find a compatibility table, so I created the following fiddle:
https://jsfiddle.net/deamvp7r/
if((function(){ /*test*/ }).toString().match('test').length === 0) {
alert ("NO SUPPORT");
} else {
alert ("SUPPORTED");
}
and tested it manually on BrowserStack. For what it's worth, here are the browsers I've tested and what I've found so far as far as comment support in Function.toString():
This list is clearly far from exhaustive, so be careful if you have to support older/more obscure browsers yet. But the percentage of popular browsers that support comments currently seems pretty high.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With