js中一些常见的小坑

来源:互联网 发布:博世华域武汉待遇知乎 编辑:程序博客网 时间:2024/05/22 00:27

1 sort()函数的排序,我们都知道这个是用作字母的排序,如何进行数字的排序和字符串数字的排序呢?我们需要定义一个函数。
//定义一个排序函数
function sortNumber(a,b) {
    return a-b;
}
var aData=["1","5","2","10"];
console.log(aData.sort(sortNumber));
输出: ["1", "2", "5", "10"]


var aData1=[1,5,2,10];
console.log(aData1.sort(sortNumber));
输出:[1,2,5,10]


2.Replace 并不“替代”
let s = "bob";
const replaced = s.replace('b', 'l');
alert(replaced === "lob");
alert(s === "bob")
输出结果: true,true
记住replace 只会替换第一个匹配的元素,想要全部替换我们可以用正则


3  比较的时候要注意


// These are ok
'abc' === 'abc' // true
1 === 1         // true
// These are not
[1,2,3] === [1,2,3] // false
{a: 1} === {a: 1}   // false
{} === {}           // false
注意引用的比较


4  数组不是原始数据类型


typeof {} === 'object'  // true
typeof 'a' === 'string' // true
typeof 1 === number     // true
// But....
typeof [] === 'object'  // true


如果你想知道你的变量是不是数组,你仍然可以用Array.isArray(myVar)


5 const Greeters = []
for (var i = 0; i < 10; i++) {
    Greeters.push(function () {
        return console.log(i)
    })
}
Greeters[0]() // 10
Greeters[1]() // 10
Greeters[2]() // 10


你是不是认为它会输出 0, 1, 2… ? 你知道它为什么不是这样输出的吗? 你会怎样修改让它输出 0, 1, 2… ?


这里有两种可能的解决方法:


用 let 替代 var. Boom. 解决了.


let和var的不同在于作用域。var的作用域是最近的函数块,let的作用域是最近的封闭块,封闭块可以小于函数块(如果不在任何块中,则let和var都是全局的)。


替代方法: 用 bind:


Greeters.push(console.log.bind(null, i))


还有很多其他方法。这只是我的两个首选

原创粉丝点击