在阅读环境变量时,JSON.parse / stringify的用途是什么?

时间:2016-04-21 09:07:10

标签: javascript node.js webpack

Pete Hunt's Webpack How To中使用此代码:

 a    b     (a) xnor (b)
___|_____|_______________|
 0 |  0  |       1
 0 |  1  |       0
 1 |  0  |       0 
 1 |  1  |       1

这里需要// definePlugin takes raw strings and inserts them, so you can put strings of JS if you want. var definePlugin = new webpack.DefinePlugin({ __DEV__: JSON.stringify(JSON.parse(process.env.BUILD_DEV || 'true')), __PRERELEASE__: JSON.stringify(JSON.parse(process.env.BUILD_PRERELEASE || 'false')) }); 是什么? JSON字符串化/解析对于克隆对象以避免突变很有用,但JSON.stringify(JSON.parse(..))是(并且只能是?)一个字符串。那么,为什么要用呢?

1 个答案:

答案 0 :(得分:3)

这是奇怪的代码。首先,克隆机制是:

var fbLogin = function() {
    facebookConnectPlugin.login(["public_profile", "email", "user_birthday", "user_location"],
        function(response) {
            console.log("Login Response :" + JSON.stringify(response));
            //alert("Login Response :" + JSON.stringify(response))
            this.authId = response.authResponse.userID;
            if (response.status == "connected") {
                facebookConnectPlugin.api("/" + response.authResponse.userID, ["public_profile", "email", "user_birthday", "user_location"],
                    function(result) {
                        this.email = result.email;
                        this.firstname = result.first_name;
                        this.lastname = result.last_name;
                        this.birthdate = result.birthday;
                        this.city = result.location.name;
                    },
                    function(error) {
                        alert("Failed: " + error);
                    });
            }
        },
        function(response) {
            alert("Other Response : " + JSON.stringify(response))
        });
}

但是,你的代码就是这样:

select c,date,s.coalesce(s.col1,0) as col1,
coalesce(s.col2,0) as col2 ,coalesce(s.col3,0) as col3 

from calendar as c 
left join source_table as s on c.date=s.date

因此,它似乎试图以艰难的方式克隆JSON字符串。这很奇怪,因为字符串在Javascript中是不可变的,因此对同一个字符串进行多次引用没有任何危险。无法更改基础字符串。

我说这个额外的代码似乎是多余的和不必要的,除非它以某种方式迫使JSON.parse(JSON.stringify(obj)) 的值成为JSON.stringify(JSON.parse(str)) 将接受而没有看似异常的东西就像一种非常奇怪的方法来测试价值。如果这是目的,代码将更明确地只是明确地检查预期的合法值而不是像这样的某种无证的副作用测试。另外,我们没有看到任何处理不良数据的异常处理程序,所以它似乎不太可能是它的原因。

我猜另一个原因是将字符串规范化为规范格式,因为在解析它的结果上调用process.env.BUILD_DEV将保证统一字符串,无论原始字符串中有什么转义字符。这仍然是一个奇怪的做法,没有任何关于它为什么要完成的评论。