关于map的使用
第一种方式
定义一个Map: let map = new Map<string, string>(); map.set("a", "1");
遍历方式:
1.(推荐使用) map.forEach((value, key) => { }) (参数顺序:value在前, key在后)
2. let iterator = map.values(); let r: IteratorResult<string>; while (r = iterator.next(), !r.done) { console.log(r.value); }
3. for(let i of map.values()){ console.log(i); } (适用于es6)
若提示错误: Type 'IterableIterator<string>' is not an array type. 则是因为target != es6, 不支持遍历IterableIterator
坑:
for(let i in map.values()){ console.log(i); } (虽不报错但不会进入循环)
将map的value(key) 转换成数组:
1. Array.form: let a = Array.from(departmentMap.values());
2. 扩展表达式:let a = [...departmentMap.values()]; (适用于es6)
第二种方式
var userInfo: {[index:string]: string} = {}
userInfo["name"] = "typescript"
userInfo["age"] = "14"
console.log("user name is ", userInfo["name"])
console.log("user age is ", userInfo["age"])
关于delete
delete 可以删掉key
var test = {aa:"zm",bb:"zm1",cc:"zm2"};
delete test.cc;
test.aa = null;
console.log(test);
>> Object {aa: null, bb: "zm1"}
关于Math.sqrt和Math.hypot
求平方根
Math.sqrt的计算性能要好于Math.hypot,但是对于处理特别大或者特别小的数时,前者的精度不如后者
关于apply和call
var po = [1,2,3];
var dst = [];
dst.push.apply(dst,po);
dst.push.call(dst,po);
console.log(dst);
输出--
0:1
1:2
2:3
3:Array(3) [1, 2, 3]
JS中filter()方法的使用
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let res = nums.filter((num) => {
return num > 5;
});
console.log(res); // [6, 7, 8, 9, 10]
关于构造函数和内置变量的赋值顺序
如果声明内置变量直接给他赋值,那么它会在当前类的构造函数执行之前执行,会在该类的父类构造函数执行之后执行,所以下面的结果是:“zhangman”
class A{
construct(){
this.OnInit();
}
protected OnInit(){
}
}
class B extends A{
construct(){
super()
}
private name = "zhangman";
protected OnInit(){
this.name = "caizujun";
}
}
Object.freeze()
方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象
const obj = {
prop: 42
};
Object.freeze(obj);
obj.prop = 33;
// Throws an error in strict mode
console.log(obj.prop);
// expected output: 42