1、下面这行代码会输出什么?
console.log(0.2 + 0.1 == 0.3);一看这么简单肯定输出true,但是稍微有点编程基础或者你仔细一想这题没那么简单,你就开始犹豫了,没错这会输出false。你可能不懂为什么,那么来看下面这个输出:
console.log(0.2 + 0.1);//0.30000000000000004其实出现这个结果一点都不意外,计算机运算时先把十进制转换成二进制之后再进行计算,这样计算就会出现差异导致丢失精度,只要是浮点数进行计算,就有可能丢失精度,那么我们有什么办法规避这个问题吗?还是那句话,没有什么问题是程序员不能解决的,如果有,那就是还没找到原因。例如这个例子,完全可以把0.2和0.1都乘以10然后结果再除以10解决。
2、null也是object对象,下面的代码将输出 true (而不是false) 到控制台:
var k = null;console.log(typeof k === "object");//true只要清楚这一点,所以要同时检查 bar 是否为 null来避免问题:
console.log((k !== null) && (typeof k === "object")); //false如果 k 是一个函数的时候,你也想对函数返回 true 的话,就要修改为:
console.log((k !== null) && ((typeof k === "object") || (typeof k === "function")));如果 k 是一个数组(例如,当 var k = [];)的时候你也想对数组返回 false 时,修改为:
console.log((k !== null) && (typeof k === "object") && (toString.call(k ) !== "[object Array]"));
3、类型转换问题:
console.log(1 + "1" + "1");//"111"console.log(1 + +"1" + "1");//"21"console.log("A" - "C"+ "1");//"NaN1"console.log("A" - "B"+ 1);//NaNconsole.log(+"1" + "1" + -"1")//"11-1"JavaScript是弱类型语言,运算时会自动转换类型1.这个很容易理解,数字连接字符串,自动转换为字符型,相当于字符串连接;2."1"前面多的一个+被视为的运算符,所以先执行+"1",那么就把字符型转换为数字了,所以接着元算1+1然后在连接字符1,就是"21";
3.字符型没办法使用运算符 - 运算,而且都不行转换为数字,所以结果是NaN,连接字符串后为"NaN1";
4.同上,只是NaN不能同数字进行运算,所以结果还是NaN;
5.同理,先运算+"1"和+"1" ,相当于 1+"1" + -1,下一步执行为"11" + -1,结果为"11-1"。
4、Replace()方法:
var v = "abacad"; v.replace("a", "1"); // '1bacad' v.replace(/a/g, "1"); // '1b1c1d'JavaScript的replace()方法不像C#、JAVA中那样会匹配全部字符去替换,如果想全部替换只能使用正则。
5、在JavaScript中不要使用跟HTML的id一样的变量名:
<input type="button" id="TheButton"><script> TheButton = get("TheButton");</script> IE会报对象未定义的错误。 https://mp.weixin.qq.com/s?__biz=MzUyNTc4NjU4Mw==&mid=2247483764&idx=1&sn=a674fc86433fd5497912294abc0ac444&chksm=fa198dcccd6e04da8d50d410af06f2ee054a12c78fa0ac4129f11cac835223db94f4bac734ce#rd