JS标准库/数组API
JS内存有stack、heap。stack中有global/window对象,其是一个hash。其中有标准库(object、string、number等)
new Object(1) 和 Object(1)没什么区别 但是String(1)和new String(1)不同
let f = ['1', '2'] 等价于 let f = new Array('1','2')
var a = Array(3) length = 3. var a = Array(3,3) {0:3, 1:3 ,length:2}
第一类 基本类型Number, String,Boolean.
Number() => 基本类型 new Number() => 对象
第二类 复杂对象Object(包括Array,Function)
Object() => 对象 new Object() => 对象 加不加new一样
var f = function(a,b){return a+b} 等价于 var f = (new)Function('a', 'b', 'return a+b') 奇葩。。
数组Array
var a = [1,2,3] ; a.xxx = 'xxx' 也可以,但是a.length还是为3
for(let i=0; i<a.length;i++){ 只有三项
}
for(let key in a){ 有四项。
}
伪数组:
原型链__proto__没有指向 Array.prototype,没有push方法。 arguments是伪数组(目前先接触这个)
function f(){
console.dir(arguments)
}
执行f(1,2,3)会打印出来。
数组API forEach
a = ['a', 'b', 'c']
a.forEach(function(x,y){
console.log('value', x)
console.log('key',y)
}
)
打印出 所有value 和 key
也可以只一个
a.forEach(function (item) {
console.log('item', item)
}
)
数组API a.sort() (注意,sort会改变原值!!!!
快速排序。
a = []
a.sort( function(x,y){return x-y} ) 升序
a.sort( function(x,y){return x-y} ) 降序
hash = {
'a': 100,
'b': 300,
'c':200
} a.sort( function(x,y){ return hash[x] -hash[y] } ) 结果: ['a', 'c', 'b'] 正序
数组API a.join()
a = [1,2,3]
a.join('aa') => "1aa2aa3"
在数组之间加东西变字符串。 a.join(',') = a+'' = a.toString() = "1,2,3"
数组API a.concat()
a = [1,2] b = [3,4]
常规用法: a.concat(b) => a = [1,2,3,4]
另一个好用法->深拷贝生成新数组。
var b = a.concat([])
b = [1,2]
a===b -> false 新开辟了一块内存,stack中a、b地址指向不同
数组API a.map()
a.forEach 和 a.map功能上一样,但是a.map有返回值 (除了遍历,还会收集)以前多少项,新数组多少项。也可以返回对象
a = [1,2,3]
a.map(function (value, ket){
return value*2
})
或者箭头函数形式: a.map(value => value*x) 与上面等同 注意这是隐式返回(我不太喜欢
示例2:
let array = messages.map((item) => {
return item.attributes
})
数组API a.filter
a = [1,2,3,4,5,6,7]
a.filter( function (value, key){
return value >= 5
}) 得到:[5,6,7]
数组API a.reduce
https://www.cnblogs.com/alex1504/p/10993538.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
伪数组
arguments、DOM API elements
数组push
数组里扔东西 texts = []
for(i;;i++){ texts.push(nodes[i].textContent )}
数组 textContent
获取字符串内容