javascript-语句
1.对象时不可迭代访问的。尝试使用for/of循环会throw TypeError
let o={x:1,y:2,z:3};
for(let element of o){
console.log(element);
}//throw typeError
2.可以使用Object.keys()方法实现对象迭代
let o={x:1,y:2,z:3};
let keys="";
for(let k of Object.keys(o)){
keys+=k;
}//keys="xyz"
Object.keys()会返回由对象属性构成的数组,数组可以迭代。
如果只关心对象的值可以用下面方式:
let sum=0;
for(let v of Object.value(o)){
sum+=v;
}//sum=6;
如果值和属性都关心则:
let pairs="";
for(let[k,v] of Object.entries(o)){
pairs+=k+v;
}//pairs="x1y2z3"
3.Es6以后字符串是可以迭代的
let frequency={};
for(let letter of "mississippi"){
if(frequency[letter]){
frequency[letter]++;
}else{
frequency[letter]=1;
}
}//结果{m:1,i:4,s:4,p:2}用于统计字符出现的频率。
4.Set集合,Map映射
let text="Na na na na na na na Batman!";
let wordSet=new Set(text.split(" "));
let unique=[];
for(let word of wordSet){
unique.push(word);
}//集合中的元素不重复,所以结果为unique=["Na","na","Batman!"]
Map的迭代是返回的键值对。
let m=new Map([1,"one"]);
for(let[key,value] of m){
key
value
}
5.4.5 for/in
for/of要求处理对象是可迭代的。for/in可以适用于任何的对象。
for(let p in o){
console.log(o[p]);
}
使用数组遍历时,需要用for of代替for in的使用。
6.严格模式strict mode和非严格模式的区别
(1)严格模式不允许使用with
(2)严格模式,所有的变量必须在使用前进行声明。
(3)严格模式中,函数调用其他函数this指针是Undefined。非严格模式,函数调用函数会传递全局的this指针。
严格模式中,函数调用call(),apply()this的值会作为第一参数传递给call(),apply(),非严格模式,null,undefined值会被全局对象替代,非对象值会被转化为对象。
(4)严格模式,对不可写的属性赋值,对不可扩展的对象添加新属性会throw TypeError。非严格模式会失败,但不会报错。
(5)严格模式,eval()不能定义变量,定义函数。非严格模式可以。eval()定义的函数和对象,在eval返回时会被舍弃。
(6)严格模式,删除操作符delete在删除变量,函数,函数参数时会抛出SyntaxError异常,非严格模式表达式无效,返回false
(7)严格模式,对象定义两个同名属性时会报错,非严格模式不会报错。
(8)严格模式,函数声明有两个同名参数时会报错,syntax error非严格模式不回报错。
(9)严格模式,标识符eval,arguments会被视为关键字,不允许改变他们的值。
(10)严格模式,对栈的操作会受限制。arguments.caller arguments.callee会throw TypeError
7.函数可以调用放在声明之前,类必须先声明在调用。
8.import 和export
值对文件来说是私有的,必需显式声明,其他文件才可以使用该值
const PI=Math.PI;
const TAU=2*PI;
export{PI,TAU};
import Circle from './geometry/circle.js'
import {PI,TAU} from './geometry/constants.js'
export const TAU=2Math.PI;
export function magnitude(x,y){return Math.sqrt(xx+y*y);}
export default class Circle{}

浙公网安备 33010602011771号