反单引号:让JS字符拼接更优雅
本帖最后由 马黑黑 于 2022-3-29 13:14 编辑优雅之外,也更方便。我们一写 table 标签为例,我们知道,它是由一系列的父标签和子标签组成。比如下面的2*2表格代码:
<table>
<tr>
<td>行一 : 单元格一</td>
<td>行一 : 单元格二</td>
</tr>
<tr>
<td>行一 : 单元格一</td>
<td>行一 : 单元格二</td>
</tr>
</table>
用 HTML 写表格自然没啥问题,但多数情况下,我们需要用表格加载庞大的数据,这时候用 JS 写表格很省事,但有个问题,传统的字符串拼接方式,代码会令人眼花缭乱,一系列的加号带着一大堆的单引号、双引号,不太好区分哪个对哪个,tr、td写得不对称也是常用的是。为此,表格和数据相对复杂的,还是用反单引号写表格及其数据更好。先看常规的字串拼接写法(假设我们已经有了一个二维数组 arr ,我们要写一个 arr.length*4的表格):
var tbCode = "<table class='tbcl'><tr>";
for(j=0; j<arr.length; j++) {
tbCode += "<td>" + (j+1) + "</td><td>" + arr + "</td><td>" + arr + "</td><td>" + arr + "</td>";
}
tbCode += "</tr></table>";
看得出来,循环语句内的拼接单元格的语句,长且不说,主要是拼接方法不易阅读,不方便查错。改用反单引号来写字串拼接,情况大不相同:
var tbCode = `<table class='tbcl'><tr>`;
for(j=0; j<arr.length; j++) {
tbCode += `
<td>${j+1}</td>
<td>${arr}</td>
<td>${arr}</td>
<td>${arr}</td>`;
}
tbCode += `</tr></table>`;
这里,循环体内外的字串拼接,我们都用了反单引号,这是允许的。反单引号里面的字串,可以随意按语法规范使用单引号、双引号,最主要的,其一:字符串可以和变量、算式放在一起,方法是变量和算式用 ${变量或算式} 这样的语句格式,其前后都可以有字符串;其二:拼接的字串可以分行写,令所拼接的字串群能够一目了然。
这几个优点,便是这种字串拼接的写法的优雅与方便所在。
我又不记得在论坛里,字母 i 放在中括号里有特殊意义(斜体)。现在改为 j 了。 <style>
.tbcl {
margin: auto;
border: 1px solid #696969;
width: 760px;
border-collapse: collapse;
box-shadow: 2px 2px 4px #999;
}
.tbcl td, .tbcl th { padding: 4px; border:1px solid #696969; font: 16px Sans-serif; }
.tbcl th { padding: 6px 0;background:#696969; color:white; font-weight:bold; text-align:center; }
</style>
</head>
<body>
<script language="javascript">
var clAr = [
['LightPink', '浅粉红', '#FFB6C1 ', '255,182,193'],
['Pink', '粉红', '#FFC0CB ', '255,192,203'],
['Crimson', '猩红', '#DC143C ', '220,20,60'],
['LavenderBlush', '脸红的淡紫色', '#FFF0F5 ', '255,240,245'],
['PaleVioletred', '苍白的紫罗兰红色', '#DB7093 ', '219,112,147'],
['HotPink', '热情的粉红', '#FF69B4 ', '255,105,180'],
['DeepPink', '深粉色', '#FF1493 ', '255,20,147'],
['MediumVioletred', '适中的紫罗兰红色', '#C71585 ', '199,21,133'],
['Orchid', '兰花的紫色', '#DA70D6 ', '218,112,214'],
['Thistle', '蓟', '#D8BFD8 ', '216,191,216'],
['plum', '李子', '#DDA0DD ', '221,160,221'],
['Violet', '紫罗兰', '#EE82EE ', '238,130,238'],
['Magenta', '洋红', '#FF00FF ', '255,0,255'],
['Fuchsia', '灯笼海棠(紫红色)', '#FF00FF ', '255,0,255'],
['DarkMagenta', '深洋红色', '#8B008B ', '139,0,139'],
['Purple', '紫色', '#800080 ', '128,0,128'],
['MediumOrchid', '适中的兰花紫', '#BA55D3 ', '186,85,211'],
['DarkVoilet', '深紫罗兰色', '#9400D3 ', '148,0,211'],
['DarkOrchid', '深兰花紫', '#9932CC ', '153,50,204'],
['Indigo', '靛青', '#4B0082 ', '75,0,130'],
['BlueViolet', '深紫罗兰的蓝色', '#8A2BE2 ', '138,43,226'],
['MediumPurple', '适中的紫色', '#9370DB ', '147,112,219'],
['MediumSlateBlue', '适中的板岩暗蓝灰色', '#7B68EE ', '123,104,238'],
['SlateBlue', '板岩暗蓝灰色', '#6A5ACD ', '106,90,205'],
['DarkSlateBlue', '深岩暗蓝灰色', '#483D8B ', '72,61,139'],
['Lavender', '熏衣草花的淡紫色', '#E6E6FA ', '230,230,250'],
['GhostWhite', '幽灵的白色', '#F8F8FF ', '248,248,255'],
['Blue', '纯蓝', '#0000FF ', '0,0,255'],
['MediumBlue', '适中的蓝色', '#0000CD ', '0,0,205'],
['MidnightBlue', '午夜的蓝色', '#191970 ', '25,25,112'],
['DarkBlue', '深蓝色', '#00008B ', '0,0,139'],
['Navy', '海军蓝', '#000080 ', '0,0,128'],
['RoyalBlue', '皇军蓝', '#4169E1 ', '65,105,225'],
['CornflowerBlue', '矢车菊的蓝色', '#6495ED ', '100,149,237'],
['LightSteelBlue', '淡钢蓝', '#B0C4DE ', '176,196,222'],
['LightSlateGray', '浅石板灰', '#778899 ', '119,136,153'],
['SlateGray', '石板灰', '#708090 ', '112,128,144'],
['DoderBlue', '道奇蓝', '#1E90FF ', '30,144,255'],
['AliceBlue', '爱丽丝蓝', '#F0F8FF ', '240,248,255'],
['SteelBlue', '钢蓝', '#4682B4 ', '70,130,180'],
['LightSkyBlue', '淡蓝色', '#87CEFA ', '135,206,250'],
['SkyBlue', '天蓝色', '#87CEEB ', '135,206,235'],
['DeepSkyBlue', '深天蓝', '#00BFFF ', '0,191,255'],
['LightBLue', '淡蓝', '#ADD8E6 ', '173,216,230'],
['PowDerBlue', '火药蓝', '#B0E0E6 ', '176,224,230'],
['CadetBlue', '军校蓝', '#5F9EA0 ', '95,158,160'],
['Azure', '蔚蓝色', '#F0FFFF ', '240,255,255'],
['LightCyan', '淡青色', '#E1FFFF ', '225,255,255'],
['PaleTurquoise', '苍白的绿宝石', '#AFEEEE ', '175,238,238'],
['Cyan', '青色', '#00FFFF ', '0,255,255'],
['Aqua', '水绿色', '#00FFFF ', '0,255,255'],
['DarkTurquoise', '深绿宝石', '#00CED1 ', '0,206,209'],
['DarkSlateGray', '深石板灰', '#2F4F4F ', '47,79,79'],
['DarkCyan', '深青色', '#008B8B ', '0,139,139'],
['Teal', '水鸭色', '#008080 ', '0,128,128'],
['MediumTurquoise', '适中的绿宝石', '#48D1CC ', '72,209,204'],
['LightSeaGreen', '浅海洋绿', '#20B2AA ', '32,178,170'],
['Turquoise', '绿宝石', '#40E0D0 ', '64,224,208'],
['Auqamarin', '绿玉\碧绿色', '#7FFFAA ', '127,255,170'],
['MediumAquamarine', '适中的碧绿色', '#00FA9A ', '0,250,154'],
['MediumSpringGreen', '适中的春天的绿色', '#F5FFFA ', '245,255,250'],
['MintCream', '薄荷奶油', '#00FF7F ', '0,255,127'],
['SpringGreen', '春天的绿色', '#3CB371 ', '60,179,113'],
['SeaGreen', '海洋绿', '#2E8B57 ', '46,139,87'],
['Honeydew', '蜂蜜', '#F0FFF0 ', '240,255,240'],
['LightGreen', '淡绿色', '#90EE90 ', '144,238,144'],
['PaleGreen', '苍白的绿色', '#98FB98 ', '152,251,152'],
['DarkSeaGreen', '深海洋绿', '#8FBC8F ', '143,188,143'],
['LimeGreen', '酸橙绿', '#32CD32 ', '50,205,50'],
['Lime', '酸橙色', '#00FF00 ', '0,255,0'],
['ForestGreen', '森林绿', '#228B22 ', '34,139,34'],
['Green', '纯绿', '#008000 ', '0,128,0'],
['DarkGreen', '深绿色', '#006400 ', '0,100,0'],
['Chartreuse', '查特酒绿', '#7FFF00 ', '127,255,0'],
['LawnGreen', '草坪绿', '#7CFC00 ', '124,252,0'],
['GreenYellow', '绿黄色', '#ADFF2F ', '173,255,47'],
['OliveDrab', '橄榄土褐色', '#556B2F ', '85,107,47'],
['Beige', '米色(浅褐色)', '#6B8E23 ', '107,142,35'],
['LightGoldenrodYellow', '浅秋麒麟黄', '#FAFAD2 ', '250,250,210'],
['Ivory', '象牙', '#FFFFF0 ', '255,255,240'],
['LightYellow', '浅黄色', '#FFFFE0 ', '255,255,224'],
['Yellow', '纯黄', '#FFFF00 ', '255,255,0'],
['Olive', '橄榄', '#808000 ', '128,128,0'],
['DarkKhaki', '深卡其布', '#BDB76B ', '189,183,107'],
['LemonChiffon', '柠檬薄纱', '#FFFACD ', '255,250,205'],
['PaleGodenrod', '灰秋麒麟', '#EEE8AA ', '238,232,170'],
['Khaki', '卡其布', '#F0E68C ', '240,230,140'],
['Gold', '金', '#FFD700 ', '255,215,0'],
['Cornislk', '玉米色', '#FFF8DC ', '255,248,220'],
['GoldEnrod', '秋麒麟', '#DAA520 ', '218,165,32'],
['FloralWhite', '花的白色', '#FFFAF0 ', '255,250,240'],
['OldLace', '老饰带', '#FDF5E6 ', '253,245,230'],
['Wheat', '小麦色', '#F5DEB3 ', '245,222,179'],
['Moccasin', '鹿皮鞋', '#FFE4B5 ', '255,228,181'],
['Orange', '橙色', '#FFA500 ', '255,165,0'],
['PapayaWhip', '番木瓜', '#FFEFD5 ', '255,239,213'],
['BlanchedAlmond', '漂白的杏仁', '#FFEBCD ', '255,235,205'],
['NavajoWhite', 'Navajo白', '#FFDEAD ', '255,222,173'],
['AntiqueWhite', '古代的白色', '#FAEBD7 ', '250,235,215'],
['Tan', '晒黑', '#D2B48C ', '210,180,140'],
['BrulyWood', '结实的树', '#DEB887 ', '222,184,135'],
['Bisque', '(浓汤)乳脂,番茄等', '#FFE4C4 ', '255,228,196'],
['DarkOrange', '深橙色', '#FF8C00 ', '255,140,0'],
['Linen', '亚麻布', '#FAF0E6 ', '250,240,230'],
['Peru', '秘鲁', '#CD853F ', '205,133,63'],
['PeachPuff', '桃色', '#FFDAB9 ', '255,218,185'],
['SandyBrown', '沙棕色', '#F4A460 ', '244,164,96'],
['Chocolate', '巧克力', '#D2691E ', '210,105,30'],
['SaddleBrown', '马鞍棕色', '#8B4513 ', '139,69,19'],
['SeaShell', '海贝壳', '#FFF5EE ', '255,245,238'],
['Sienna', '黄土赭色', '#A0522D ', '160,82,45'],
['LightSalmon', '浅鲜肉(鲑鱼)色', '#FFA07A ', '255,160,122'],
['Coral', '珊瑚', '#FF7F50 ', '255,127,80'],
['OrangeRed', '橙红色', '#FF4500 ', '255,69,0'],
['DarkSalmon', '深鲜肉(鲑鱼)色', '#E9967A ', '233,150,122'],
['Tomato', '番茄', '#FF6347 ', '255,99,71'],
['MistyRose', '薄雾玫瑰', '#FFE4E1 ', '255,228,225'],
['Salmon', '鲜肉(鲑鱼)色', '#FA8072 ', '250,128,114'],
['Snow', '雪', '#FFFAFA ', '255,250,250'],
['LightCoral', '淡珊瑚色', '#F08080 ', '240,128,128'],
['RosyBrown', '玫瑰棕色', '#BC8F8F ', '188,143,143'],
['IndianRed', '印度红', '#CD5C5C ', '205,92,92'],
['Red', '纯红', '#FF0000 ', '255,0,0'],
['Brown', '棕色', '#A52A2A ', '165,42,42'],
['FireBrick', '耐火砖', '#B22222 ', '178,34,34'],
['DarkRed', '深红色', '#8B0000 ', '139,0,0'],
['Maroon', '栗色', '#800000 ', '128,0,0'],
['White', '纯白', '#FFFFFF ', '255,255,255'],
['WhiteSmoke', '白烟', '#F5F5F5 ', '245,245,245'],
['Gainsboro', '淡灰色', '#DCDCDC ', '220,220,220'],
['LightGrey', '浅灰色', '#D3D3D3 ', '211,211,211'],
['Silver', '银白色', '#C0C0C0 ', '192,192,192'],
['DarkGray', '深灰色', '#A9A9A9 ', '169,169,169'],
['Gray', '灰色', '#808080 ', '128,128,128'],
['DimGray', '暗淡的灰色', '#696969 ', '105,105,105'],
['Black', '纯黑', '#000000 ', '0,0,0',]
];
var tbCode = `<table class='tbcl'><tr>
<th style='width:40px;'>序号</th>
<th style='width:120px;'>颜色</th>
<th>英文名称</th>
<th>中文名称</th>
<th>HEX格式</th>
<th>RGB格式</th>
</tr>`;
for(i=0; i<clAr.length; i++) {
tbCode += `<tr>
<td style='text-align: center'>${i+1}</td>
<td style='background: ${clAr}'></td>
<td>${clAr}</td>
<td>${clAr}</td>
<td>${clAr}</td>
<td>${clAr}</td>
</tr>`;
}
tbCode += "</table>";
document.write(tbCode);
</script>
看得很清晰,很工整的单元表格。{:4_199:} 这个真好,本来要不停地写td tr的,用循环语句,就可以只写内容了。而且“字符串可以和变量、算式放在一起”,若碰到需要运算的,这个更能发挥出强大作用{:4_199:} 反单引号可以换行的这个更好,能看得更清楚,否则像黑黑这个颜色代码一长串地写下去,自己都要看蒙了呢{:4_173:} 马黑黑 发表于 2022-3-29 13:15
我又不记得在论坛里,字母 i 放在中括号里有特殊意义(斜体)。现在改为 j 了。
黑黑辛苦了,感谢带来的美妙的知识{:4_187:} 红影 发表于 2022-3-29 16:06
黑黑辛苦了,感谢带来的美妙的知识
共享共享 红影 发表于 2022-3-29 16:05
反单引号可以换行的这个更好,能看得更清楚,否则像黑黑这个颜色代码一长串地写下去,自己都要看蒙了呢{:4_ ...
可不是吗 马黑黑 发表于 2022-3-29 18:14
共享共享
又去看了看那个颜色表,真挺不容易的,不仅要把符号内容展示出来,要要在第二列把底色调用出来。 马黑黑 发表于 2022-3-29 18:14
可不是吗
这个做表格真好{:4_187:} 红影 发表于 2022-3-29 20:14
这个做表格真好
但我一直纳闷哈,论坛的表格怎么都不好控制 红影 发表于 2022-3-29 20:13
又去看了看那个颜色表,真挺不容易的,不仅要把符号内容展示出来,要要在第二列把底色调用出来。
{:4_203:} 马黑黑 发表于 2022-3-29 20:46
但我一直纳闷哈,论坛的表格怎么都不好控制
就是你说的i用括号有其他含义的问题吧。 马黑黑 发表于 2022-3-29 20:47
{:4_187:} 红影 发表于 2022-3-29 23:01
就是你说的i用括号有其他含义的问题吧。
不是。那个可以换其他的,是论坛自己用了大量的table标签,它对table做了很多预定义 马黑黑 发表于 2022-3-29 23:02
不是。那个可以换其他的,是论坛自己用了大量的table标签,它对table做了很多预定义
哦哦,如同埋了很多雷,编写代码的过程中还得小心避雷{:4_173:} 红影 发表于 2022-3-30 09:34
哦哦,如同埋了很多雷,编写代码的过程中还得小心避雷
踩雷是常态 马黑黑 发表于 2022-3-30 12:12
踩雷是常态
踩得多了,就炸迷糊了{:4_189:} 红影 发表于 2022-3-30 16:40
踩得多了,就炸迷糊了
{:5_147:}{:4_198:}