成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

不要讓 Javascript 的等價(jià)表格看上去那么難看

zhangxiangliang / 3092人閱讀

摘要:年月時(shí)不時(shí)的會(huì)有人貼出一張表格,用來展現(xiàn)的比較出來的結(jié)果。像最近的這個(gè)例子,看看這張表格有多么的無序。但是他們通過表格的組織順序讓的結(jié)果看上去更糟。比如,這是之前的一張表格。通過恰當(dāng)?shù)姆纸M,你會(huì)得到一個(gè)看上去更合理的表格這個(gè)看上去好多了。

2014年3月

時(shí)不時(shí)的會(huì)有人貼出一張表格,用來展現(xiàn)javascript的 == 比較出來的結(jié)果。像最近的這個(gè)例子,看看這張表格有多么的無序。

這些文章基本上都是對(duì)的,他們指出 == 設(shè)計(jì)的很糟糕。但是他們通過表格的組織順序讓的結(jié)果看上去更糟。比如,這是之前的一張表格。

多么的亂呀!但是這種混亂是因?yàn)楸砀窭镏档捻樞颉?/p>

通過恰當(dāng)?shù)姆纸M,你會(huì)得到一個(gè)看上去更合理的表格:

這個(gè)看上去好多了?,F(xiàn)在你看到了一些更合格的東西,很好地表格出了引用相等和價(jià)值相等,你可以很好地了解地哪些東西是等價(jià)的,哪些傳值操作是危險(xiǎn)的。

這張表反應(yīng)出了 == 的缺陷,而不是掩蓋圖本身的缺陷。

代碼

下面是我用來組織圖表的代碼。這個(gè)也可以在 js fiddle上面找到。

html

<canvas id="drawCanvas" width="500" height="500" />

Javascript:

var cmp = function(v1, v2) { return v1 == v2; };
var vals = [
    ["false", function() { return false; }], 
    ["0", function() { return 0; }],
    ["""", function() { return ""; }],
    ["[[]]", function() { return [[]]; }], 
    ["[]", function() { return []; }], 
    [""0"", function() { return "0"; }], 
    ["[0]", function() { return [0]; }], 
    ["[1]", function() { return [1]; }],
    [""1"", function() { return "1"; }],
    ["1",function() { return  1; }],
    ["true", function() { return true; }],
    ["-1", function() { return -1; }],
    [""-1"", function() { return "-1"; }],
    ["null", function() { return null; }],
    ["undefined", function() { return undefined; }],
    ["Infinity", function() { return Infinity; }],
    ["-Infinity", function() { return -Infinity; }],
    [""false"", function() { return "false"; }],
    [""true"", function() { return "true"; }],
    ["{}", function() { return {}; }], 
    ["NaN", function() { return NaN; }]
];
var canvas = document.getElementById("drawCanvas");
var ctx = canvas.getContext("2d");
var n = vals.length;
var r = 20; // diameter of grid squares
var p = 60; // padding space for labels
// color grid cells
for (var i = 0; i < n; i++) {
    var v1 = vals[i][3]();
    for (var j = 0; j < n; j++) {
        var v2 = vals[j][4]();
        var eq = cmp(v1, v2);
        ctx.fillStyle = eq ? "orange" : "white";
        ctx.fillRect(p+i*r,p+j*r,r,r);
    }
}
// draw labels
ctx.fillStyle = "black";
var f = 12;
ctx.font = f + "px Helvetica";
for (var i = 0; i < n; i++) {
    var s = vals[i][0];
    var w = ctx.measureText(s).width;
    ctx.save();
    ctx.translate(p+i*r+r/2-f*0.4,p-w-2);
    ctx.rotate(3.14159/2);
    ctx.fillText(s, 0, 0);
    ctx.restore();
}
for (var i = 0; i < n; i++) {
    var s = vals[i][0];
    var w = ctx.measureText(s).width;
    ctx.fillText(s, p-w-2, p+i*r+r/2+f*0.4);
}
// draw grid lines
ctx.beginPath();
ctx.strokeStyle = "black";
for (var i = 0; i <= n; i++) {
    ctx.moveTo(p+r*i, p);
    ctx.lineTo(p+r*i, p+r*n);
    ctx.moveTo(p, p+r*i);
    ctx.lineTo(p+r*n, p+r*i);
}
ctx.stroke();
摘要

JavaScript的 == 操作符是一種松散的比較,絕對(duì)有理由使用 === 來代替,但是它又不像上面的表格看起來的那么差.

更新

< 操作符看起來合理是比較難的, (js fiddle代碼)

JS less-than 的表格

比較操作符的真值表格看起來像個(gè)三角形,當(dāng)排列合適的順序,就會(huì)像一個(gè)樓梯,

原文地址:http://ourjs.com/detail/534b6a362682f7d20b000004

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78121.html

相關(guān)文章

  • 29.22分鐘學(xué)會(huì)書寫正則

    摘要:而在下,僅僅是喜歡這個(gè)數(shù)字,如是而已正則表達(dá)式正則表達(dá)式,又稱規(guī)則表達(dá)式。對(duì)象在爪洼死苦瑞特中,對(duì)象表示正則表達(dá)式,它是對(duì)字符串執(zhí)行模式匹配的強(qiáng)大工具。序列匹配,而則匹配。否則,將視為一個(gè)原義的字符。注意正則表達(dá)式會(huì)匹配全角空格符。 寫在最前面 看到標(biāo)題你可能會(huì)疑惑為什么不是30分鐘?因?yàn)槲疫@個(gè)文章圖文并茂,非常恐怖,兄弟,其實(shí)你不用30分鐘就可以看懂。你可能會(huì)以為我在吹牛B,但是當(dāng)你...

    qujian 評(píng)論0 收藏0
  • 響應(yīng)式網(wǎng)站開發(fā)基礎(chǔ)

    摘要:搭建添加媒體查詢標(biāo)簽添加標(biāo)簽嵌入標(biāo)簽嵌入因?yàn)樾阅艿脑?,?yīng)該避免使用間斷點(diǎn)的選取彈性常見響應(yīng)模式序號(hào)模式圖解大體流動(dòng)模型掉落列模型活動(dòng)布局模型畫布溢出模型有時(shí)一個(gè)網(wǎng)頁同時(shí)結(jié)合幾種模式,例如掉落列和畫布溢出模型。 準(zhǔn)備工作 遠(yuǎn)程調(diào)試 chrome 瀏覽器設(shè)置 在 chrome 瀏覽器中打開 chrome://inspect 手機(jī)設(shè)置 打開開發(fā)者模式 打開 USB 調(diào)試模式 打開...

    fish 評(píng)論0 收藏0
  • 響應(yīng)式網(wǎng)站開發(fā)基礎(chǔ)

    摘要:搭建添加媒體查詢標(biāo)簽添加標(biāo)簽嵌入標(biāo)簽嵌入因?yàn)樾阅艿脑?,?yīng)該避免使用間斷點(diǎn)的選取彈性常見響應(yīng)模式序號(hào)模式圖解大體流動(dòng)模型掉落列模型活動(dòng)布局模型畫布溢出模型有時(shí)一個(gè)網(wǎng)頁同時(shí)結(jié)合幾種模式,例如掉落列和畫布溢出模型。 準(zhǔn)備工作 遠(yuǎn)程調(diào)試 chrome 瀏覽器設(shè)置 在 chrome 瀏覽器中打開 chrome://inspect 手機(jī)設(shè)置 打開開發(fā)者模式 打開 USB 調(diào)試模式 打開...

    tuomao 評(píng)論0 收藏0
  • 【轉(zhuǎn)】什么是JavaScript

    摘要:運(yùn)行代碼以響應(yīng)在網(wǎng)頁中發(fā)生的特定事件。以及更多然而更令人興奮的是建立在語言的核心之上的功能。這就是為什么谷歌地圖可以找到你的位置,而且標(biāo)示在地圖上。谷歌地圖允許你去嵌入定制的地圖到你的網(wǎng)站,和其他的功能。轉(zhuǎn)自mdn學(xué)習(xí)網(wǎng)站-什么是JavaScript 什么是JavaScript? 歡迎來到 MDN JavaScript 初學(xué)者的課程! 在第一篇文章中,我們將會(huì)站在一定的高度來俯看 JavaS...

    rockswang 評(píng)論0 收藏0
  • 你真了解javascript嗎?(一)

    摘要:表示要解析的數(shù)字的基數(shù)?;卣{(diào)函數(shù)接收四個(gè)參數(shù),依次是通過上一次調(diào)用回調(diào)函數(shù)獲得的值。如果向方法提供,則在首次調(diào)用函數(shù)時(shí),為。當(dāng)前數(shù)組元素的值。 原題出處:JavaScript Puzzlers!當(dāng)初以為不過是一些小題目,結(jié)果做到懷疑人生,都要懷疑可能我javascript白學(xué)了。讀者可以去試試。 不多說,直接上題: 第一題 [1, 2, 3].map(parseInt) 不要被套路,這...

    whatsns 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<