JAVASCRIPT 对有符号整型、无符号整型、浮点型、十六进制、二进制的数据处理
1.十六进制字符串转有符号整型,支持S8、S16、S32:
function hexToInt(hex) {
if(hex.length % 2 != 0) {
hex = "0" + hex;
}
var num = parseInt(hex, 16);
var maxVal = Math.pow(2, hex.length / 2 * 8);
if(num > maxVal / 2 - 1) {
num = num - maxVal
}
return num;
}
2.十六进制字符串转无符号整型,支持U8、U16、U32:
parseInt(str,16);
3.十六进制字符串转有/无符号64位整型,支持S64、U64:
function HexStringToInt64StringConverter(signed) {
var hexCode = {
'0': "0000",
'1': "0001",
'2': "0010",
'3': "0011",
'4': "0100",
'5': "0101",
'6': "0110",
'7': "0111",
'8': "1000",
'9': "1001",
'a': "1010",
'b': "1011",
'c': "1100",
'd': "1101",
'e': "1110",
'f': "1111"
};
var preComputedLongMath = {
"20": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
"21": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
"22": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],
"23": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8],
"24": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6],
"25": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2],
"26": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4],
"27": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 8],
"28": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 6],
"29": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 2],
"210": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4],
"211": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 8],
"212": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 9, 6],
"213": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 9, 2],
"214": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 3, 8, 4],
"215": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 7, 6, 8],
"216": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 5, 3, 6],
"217": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 7, 2],
"218": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 2, 1, 4, 4],
"219": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 4, 2, 8, 8],
"220": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 8, 5, 7, 6],
"221": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 9, 7, 1, 5, 2],
"222": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 9, 4, 3, 0, 4],
"223": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 8, 8, 6, 0, 8],
"224": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 7, 7, 7, 2, 1, 6],
"225": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 5, 4, 4, 3, 2],
"226": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 1, 0, 8, 8, 6, 4],
"227": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 2, 1, 7, 7, 2, 8],
"228": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 8, 4, 3, 5, 4, 5, 6],
"229": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 6, 8, 7, 0, 9, 1, 2],
"230": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 3, 7, 4, 1, 8, 2, 4],
"231": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 4, 7, 4, 8, 3, 6, 4, 8],
"232": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 9, 4, 9, 6, 7, 2, 9, 6],
"233": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 8, 9, 9, 3, 4, 5, 9, 2],
"234": [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 1, 7, 9, 8, 6, 9, 1, 8, 4],
"235": [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 5, 9, 7, 3, 8, 3, 6, 8],
"236": [0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 7, 1, 9, 4, 7, 6, 7, 3, 6],
"237": [0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 4, 3, 8, 9, 5, 3, 4, 7, 2],
"238": [0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 4, 8, 7, 7, 9, 0, 6, 9, 4, 4],
"239": [0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 9, 7, 5, 5, 8, 1, 3, 8, 8, 8],
"240": [0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 9, 5, 1, 1, 6, 2, 7, 7, 7, 6],
"241": [0, 0, 0, 0, 0, 0, 0, 2, 1, 9, 9, 0, 2, 3, 2, 5, 5, 5, 5, 2],
"242": [0, 0, 0, 0, 0, 0, 0, 4, 3, 9, 8, 0, 4, 6, 5, 1, 1, 1, 0, 4],
"243": [0, 0, 0, 0, 0, 0, 0, 8, 7, 9, 6, 0, 9, 3, 0, 2, 2, 2, 0, 8],
"244": [0, 0, 0, 0, 0, 0, 1, 7, 5, 9, 2, 1, 8, 6, 0, 4, 4, 4, 1, 6],
"245": [0, 0, 0, 0, 0, 0, 3, 5, 1, 8, 4, 3, 7, 2, 0, 8, 8, 8, 3, 2],
"246": [0, 0, 0, 0, 0, 0, 7, 0, 3, 6, 8, 7, 4, 4, 1, 7, 7, 6, 6, 4],
"247": [0, 0, 0, 0, 0, 1, 4, 0, 7, 3, 7, 4, 8, 8, 3, 5, 5, 3, 2, 8],
"248": [0, 0, 0, 0, 0, 2, 8, 1, 4, 7, 4, 9, 7, 6, 7, 1, 0, 6, 5, 6],
"249": [0, 0, 0, 0, 0, 5, 6, 2, 9, 4, 9, 9, 5, 3, 4, 2, 1, 3, 1, 2],
"250": [0, 0, 0, 0, 1, 1, 2, 5, 8, 9, 9, 9, 0, 6, 8, 4, 2, 6, 2, 4],
"251": [0, 0, 0, 0, 2, 2, 5, 1, 7, 9, 9, 8, 1, 3, 6, 8, 5, 2, 4, 8],
"252": [0, 0, 0, 0, 4, 5, 0, 3, 5, 9, 9, 6, 2, 7, 3, 7, 0, 4, 9, 6],
"253": [0, 0, 0, 0, 9, 0, 0, 7, 1, 9, 9, 2, 5, 4, 7, 4, 0, 9, 9, 2],
"254": [0, 0, 0, 1, 8, 0, 1, 4, 3, 9, 8, 5, 0, 9, 4, 8, 1, 9, 8, 4],
"255": [0, 0, 0, 3, 6, 0, 2, 8, 7, 9, 7, 0, 1, 8, 9, 6, 3, 9, 6, 8],
"256": [0, 0, 0, 7, 2, 0, 5, 7, 5, 9, 4, 0, 3, 7, 9, 2, 7, 9, 3, 6],
"257": [0, 0, 1, 4, 4, 1, 1, 5, 1, 8, 8, 0, 7, 5, 8, 5, 5, 8, 7, 2],
"258": [0, 0, 2, 8, 8, 2, 3, 0, 3, 7, 6, 1, 5, 1, 7, 1, 1, 7, 4, 4],
"259": [0, 0, 5, 7, 6, 4, 6, 0, 7, 5, 2, 3, 0, 3, 4, 2, 3, 4, 8, 8],
"260": [0, 1, 1, 5, 2, 9, 2, 1, 5, 0, 4, 6, 0, 6, 8, 4, 6, 9, 7, 6],
"261": [0, 2, 3, 0, 5, 8, 4, 3, 0, 0, 9, 2, 1, 3, 6, 9, 3, 9, 5, 2],
"262": [0, 4, 6, 1, 1, 6, 8, 6, 0, 1, 8, 4, 2, 7, 3, 8, 7, 9, 0, 4],
"263": [0, 9, 2, 2, 3, 3, 7, 2, 0, 3, 6, 8, 5, 4, 7, 7, 5, 8, 0, 8],
"264": [1, 8, 4, 4, 6, 7, 4, 4, 0, 7, 3, 7, 0, 9, 5, 5, 1, 6, 1, 6],
"265": [3, 6, 8, 9, 3, 4, 8, 8, 1, 4, 7, 4, 1, 9, 1, 0, 3, 2, 3, 2]
};
if(typeof(signed) != 'boolean') signed = false; function toBinary(hex) {
hex = hex.toLowerCase();
var binary = "";
for(var i = 0; i < hex.length; i++) {
binary += hexCode[hex[i]];
}
return binary;
} function to1nsComplement(binary) {
var compliment = "";
for(var i = 0; i < binary.length; i++) {
compliment += (binary.charAt(i) == "1" ? "0" : "1");
}
return compliment;
} function arrayAdd(a, b) {
var carry = 0;
var number = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for(var i = 19; i >= 0; i--) {
number[i] = a[i] + b[i] + carry;
if(number[i].toString().length > 1) {
carry = parseInt(number[i].toString().substring(0, number[i].toString().length - 1), 10);
number[i] = parseInt(number[i].toString().substring(number[i].toString().length - 1), 10)
} else {
carry = 0;
}
}
return number;
} function removeZeroPad(number) {
var lock = false;
var output = [];
for(var i = 0; i < number.length; i++) {
if(lock) {
output.push(number[i]);
} else {
if(number[i] != 0) {
lock = true;
output.push(number[i]);
}
}
}
return output;
} function binaryToDec(binary) {
var negative = false;
if(signed && (binary.charAt(0) == 1)) {
negative = true;
}
if(signed) {
binary = binary.substring(1);
if(negative) {
binary = to1nsComplement(binary);
}
}
var pos = 0;
var number = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for(var i = binary.length - 1; i >= 0; i--) {
if(binary.charAt(i) == 1) {
number = arrayAdd(number, preComputedLongMath["2" + pos])
}
pos++;
}
if(negative) {
number = removeZeroPad(arrayAdd(number, preComputedLongMath["20"]));
number.splice(0, 0, "-");
} else {
number = removeZeroPad(number);
}
return number.join("");
} this.convert = function(hex) {
var binary = toBinary(hex);
return binaryToDec(binary);
};
}
使用方法:
lid64 = new HexStringToInt64StringConverter(true).convert(str);
//true为有符号、false为无符号,str为十六进制字符串
4.二进制字符串与十六进制字符串相互转换:
//二进制转十六进制
function bin_to_hex(str) {
let hex_array = [{
key: 0,
val: "0000"
}, {
key: 1,
val: "0001"
}, {
key: 2,
val: "0010"
}, {
key: 3,
val: "0011"
}, {
key: 4,
val: "0100"
}, {
key: 5,
val: "0101"
}, {
key: 6,
val: "0110"
}, {
key: 7,
val: "0111"
},
{
key: 8,
val: "1000"
}, {
key: 9,
val: "1001"
}, {
key: 'a',
val: "1010"
}, {
key: 'b',
val: "1011"
}, {
key: 'c',
val: "1100"
}, {
key: 'd',
val: "1101"
}, {
key: 'e',
val: "1110"
}, {
key: 'f',
val: "1111"
}
]
let value = ''
let list = []
//console.log(str)
if(str.length % 4 !== 0) {
let a = "0000"
let b = a.substring(0, 4 - str.length % 4)
str = b.concat(str)
}
//console.log(str)
while(str.length > 4) {
list.push(str.substring(0, 4))
str = str.substring(4);
}
list.push(str)
//console.log(list)
for(let i = 0; i < list.length; i++) {
for(let j = 0; j < hex_array.length; j++) {
if(list[i] == hex_array[j].val) {
value = value.concat(hex_array[j].key)
break
}
}
}
//console.log(value)
return value } //十六进制转二进制
function hex_to_bin(str) {
let hex_array = [{
key: 0,
val: "0000"
}, {
key: 1,
val: "0001"
}, {
key: 2,
val: "0010"
}, {
key: 3,
val: "0011"
}, {
key: 4,
val: "0100"
}, {
key: 5,
val: "0101"
}, {
key: 6,
val: "0110"
}, {
key: 7,
val: "0111"
},
{
key: 8,
val: "1000"
}, {
key: 9,
val: "1001"
}, {
key: 'a',
val: "1010"
}, {
key: 'b',
val: "1011"
}, {
key: 'c',
val: "1100"
}, {
key: 'd',
val: "1101"
}, {
key: 'e',
val: "1110"
}, {
key: 'f',
val: "1111"
}
] let value = ""
for(let i = 0; i < str.length; i++) {
for(let j = 0; j < hex_array.length; j++) {
if(str.charAt(i) == hex_array[j].key) {
value = value.concat(hex_array[j].val)
break
}
}
}
//console.log(value)
return value
}
5.十六进制字符串与FLOAT互转
function InsertString(t, c, n) {
var r = new Array();
for(var i = 0; i * 2 < t.length; i++) {
r.push(t.substr(i * 2, n));
}
return r.join(c);
} function FillString(t, c, n, b) {
if((t == "") || (c.length != 1) || (n <= t.length)) {
return t;
}
var l = t.length;
for(var i = 0; i < n - l; i++) {
if(b == true) {
t = c + t;
} else {
t += c;
}
}
return t;
} function HexToSingle(t) {
t = t.replace(/\s+/g, "");
if(t == "") {
return "";
}
if(t == "00000000") {
return "0";
}
if((t.length > 8) || (isNaN(parseInt(t, 16)))) {
return "Error";
}
if(t.length < 8) {
t = FillString(t, "0", 8, true);
}
t = parseInt(t, 16).toString(2);
t = FillString(t, "0", 32, true);
var s = t.substring(0, 1);
var e = t.substring(1, 9);
var m = t.substring(9);
e = parseInt(e, 2) - 127;
m = "1" + m;
if(e >= 0) {
m = m.substr(0, e + 1) + "." + m.substring(e + 1)
} else {
m = "0." + FillString(m, "0", m.length - e - 1, true)
}
if(m.indexOf(".") == -1) {
m = m + ".0";
}
var a = m.split(".");
var mi = parseInt(a[0], 2);
var mf = 0;
for(var i = 0; i < a[1].length; i++) {
mf += parseFloat(a[1].charAt(i)) * Math.pow(2, -(i + 1));
}
m = parseInt(mi) + parseFloat(mf);
if(s == 1) {
m = 0 - m;
}
return m;
} function SingleToHex(t) {
if(t == "") {
return "";
}
t = parseFloat(t);
if(isNaN(t) == true) {
return "Error";
}
if(t == 0) {
return "00000000";
}
var s,
e,
m;
if(t > 0) {
s = 0;
} else {
s = 1;
t = 0 - t;
}
m = t.toString(2);
if(m >= 1) {
if(m.indexOf(".") == -1) {
m = m + ".0";
}
e = m.indexOf(".") - 1;
} else {
e = 1 - m.indexOf("1");
}
if(e >= 0) {
m = m.replace(".", "");
} else {
m = m.substring(m.indexOf("1"));
}
if(m.length > 24) {
m = m.substr(0, 24);
} else {
m = FillString(m, "0", 24, false)
}
m = m.substring(1);
e = (e + 127).toString(2);
e = FillString(e, "0", 8, true);
var r = parseInt(s + e + m, 2).toString(16);
r = FillString(r, "0", 8, true);
return InsertString(r, " ", 2).toUpperCase();
} function FormatHex(t, n, ie) {
var r = new Array();
var s = "";
var c = 0;
for(var i = 0; i < t.length; i++) {
if(t.charAt(i) != " ") {
s += t.charAt(i);
c += 1;
if(c == n) {
r.push(s);
s = "";
c = 0;
}
}
if(ie == false) {
if((i == t.length - 1) && (s != "")) {
r.push(s);
}
}
}
return r.join("\n");
} function FormatHexBatch(t, n, ie) {
var a = t.split("\n");
var r = new Array();
for(var i = 0; i < a.length; i++) {
r[i] = FormatHex(a[i], n, ie);
}
return r.join("\n");
} function HexToSingleBatch(t) {
var a = FormatHexBatch(t, 8, true).split("\n");
var r = new Array();
for(var i = 0; i < a.length; i++) {
r[i] = HexToSingle(a[i]);
}
return r.join("\r\n");
} function SingleToHexBatch(t) {
var a = t.split("\n");
var r = new Array();
for(var i = 0; i < a.length; i++) {
r[i] = SingleToHex(a[i]);
}
return r.join("\r\n");
}
使用方法:
//十六进制字符串转浮点
HexToSingle(str)
//浮点转十六进制字符串
SingleToHex(str)
JAVASCRIPT 对有符号整型、无符号整型、浮点型、十六进制、二进制的数据处理的更多相关文章
- C-基础:表达式中存在有符号类型和无符号类型时,都自动转换为无符号类型
void foo(void) { unsigned ; ; (a+b > ) puts("> 6") : puts("<= 6"); } 答案 ...
- c++ 有符号int和无符号int做加减乘除问题
c++ 有符号int和无符号int做加算术运算的问题: 一.运算过程先把有符号的补码数直接看成无符号数,在和无符号数进行算术运算 二.int和unsigned int类型进行混合算数运算时,运算结果为 ...
- Java,C 位移运算符 有符号右移>>与无符号右移>>>
个人博客 地址:https://www.wenhaofan.com/a/20181029232749 有符号右移 正数有符号右移 首先计算4>>2 将4转为二进制 0000 0100 右移 ...
- JavaScript 32位整型无符号操作
在 JavaScript 中,所有整数字变量默认都是有符号整数,这意味着什么呢? 有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数. 数值范围从 -2^ ...
- javascript 按位或(|),无符号右移(>>>)运算,组合技巧来实现————密码强度提示,四种情况??
直接上代码,原来的代码中,switch中的第一个case,判断之后,少加了个break 跳出判断语句,害得我查了半天,“怎么样式老是不对,不科学啊,呵呵,原来是没跳出case的判断了,还会执行后面的判 ...
- java中符号类型和无符号类型的问题分析
一 参考博文 java中无符号类型的解决方案 二 java中的无符号数和有符号数 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 计算机中 ...
- 有符号char转无符号short
; cout<<(int)ch<<endl; //-1 unsigned short d = ch; short dd = ch; cout<<d<<e ...
- Java-java中的有符号,无符号操作以及DataInputStream
1. 无符号和有符号 计算机中用补码表示负数,并且有一定的计算方式:另外,用二进制的最高位表示符号,0表示正数.1表示负数.这种说法本身没错,可是要有一定的解释,不然它就是错的,至少不能解释,为什么字 ...
- Java 与无符号那些事儿
最近在使用 Java 作为 WebSocket 客户端连接 Node.js 的 WebSocket 服务器的时候,由于使用的客户端库比较老,所以遇到了字节符号的问题,上网查了一下,看到这篇文章写的很有 ...
- 获取java byte的无符号数值
byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...
随机推荐
- 两个jsp界面之间使用window.location.href使用?传递参数以及接受参数
这篇文章如果能给你带来帮助,不胜荣幸,如果有不对的地方也欢迎批评指正. 网上有很多方法是讲怎么截取字符串啊等等的方法来获取参数,说实话,看着我就觉得费劲,咱们可以换一种思路来思考.一般跳转界面多为前段 ...
- Win上好用的App们
recaps 习惯了mac的输入法切换键(CapsLock),在win下真是各种不适应.于是,找到了这个recaps.亲测好用(Win10 LTSC,键盘布局添加的英文.中文,中文用的第三方输入法). ...
- [记] OpenCV4 源码编译安装 | 记录
OpenCV4 源码编译安装 | 记录 参考资料 官方文档:https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html 环境 wsl2 ...
- Zabbix3.4 安装配置
第一.配置zabbix的yum源 # rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7 ...
- AI-Chat问答随笔
Q: 操作系统和驱动的关系 A:操作系统和驱动程序是紧密相关的,它们一起构成了计算机系统中的软件部分,实现了对硬件资源的管理和控制.操作系统作为计算机系统的核心软件,主要负责管理和协调计算机系统中的各 ...
- Android版本历史
版本 Code Name 代号 API 日期 NDK 1.0 Astro 铁臂阿童木 1 1.1 Bender, Petit Four 发条机器人 2 1.5 Cupcake 纸杯 ...
- 【博客】如何在Github上创建博客
[博客]如何在Github上创建博客 1. 安装nodejs windows安装npm教程--nodejs 2. 安装hexo npm install -g hexo-cli 3. 搭建博客 $ he ...
- go 处理json
在云原生的相关技术中, 调用 kafka 和 es等中间件,返回的结果大多是 json 格式,因此我们需要频繁的对 json 进行操作. 在go这种强类型的语言中,不同于 python 和 nodej ...
- GO 语言中的 sync Map
为什么需要 sync map go 语言之所以引入 sync.Map主要是因为GO 语言自带的 map 是线程不安全的.只能保证并发的读,但是不能保证并发的写. 看下面的例子: func main() ...
- [canvas]ncaught TypeError: Cannot read properties of null (reading 'getContext')
相信你和我一样是直接复制大佬的js代码(笑) ------------ 主要问题在于:js先加载完了,html才加载,导致js获取不了html的对象 解决办法: 把 <head /> ...