数组去重
- JS方法
var a = [1,2,1,2,3,3];
var b = [];
for (let i = 0; i < a.length; i++) {
for (let j = i + 1; j < a.length; j++) {
if (a[i] === a[j]) {
j=++i;
}
}
b.push(a[i])
}
console.log(a);//(6) [1, 2, 1, 2, 3, 3]
console.log(b);//(3) [1, 2, 3]
- es6
var arr=[1,2,1];
var b=Array.from(new Set(arr));
console.log(b);//(2) [1, 2]
JS遍历对象
参考:JS遍历对象
var obj = {'0':'a','1':'b','2':'c'};
Object.keys(obj).forEach(function(key){
console.log(key,obj[key]);
});
_____________________________________________
//0 a
//1 b
//2 c
1、 Object.keys()
ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键名。
var obj = { foo: "bar", baz: 42 };
Object.keys(obj)
// ["foo", "baz"]
2 、Object.values()
Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值。
var obj = { foo: "bar", baz: 42 };
Object.values(obj)
// ["bar", 42]
Object.entries()
Object.entries方法的一个用处是,将对象转为真正的Map结构。
var obj = { foo: 'bar', baz: 42 };
var map = new Map(Object.entries(obj));
map // Map { foo: "bar", baz: 42 }
关于this
1.this是什么?
函数调用的时候会创建上下文,this 是组成上下文的一部分。因此每次函数被调用都会产生新的this,既this的值就是调用当前函数的对象。
2.作为普通函数在全局作用域中被使用
在全局作用域当中,this 永远指向 window,因此在全局作用域里作为普通函数被调用的时候,this 也是指向 window。
function fn1() {
console.log(this); //window
}
fn1();
3.作为构造函数被调用,由new调用
作为构造函数被调用的时候,this 代表它即将 new 出来的未来的对象。
function Fn1(oval) {
this.val = oval;
console.log(this); //Fn1 {val: "vvv"}
}
var val = new Fn1('vvv');
console.log(val.val)//vvv
4. 由call/apply/bind 方法调用
作为 call/apply/bind 方法被调用的时候指向传入的值
var obj = {
name: 'zhangsan'
};
function fn1() {
console.log(this); // {name: "zhangsan"}
console.log(this.name); //zhangsan
}
fn1.apply(obj);
5. 箭头函数
箭头函数本身没有this,箭头函数中的this始终指向外部对象,且不能使用call/apply/bind改变this指向也不能进行实例化。
var obj = {
name: 'zhangsan',
sayhello: function() {
var fn = () => {
console.log(this); // {name: "zhangsan"}
console.log(this.name); //zhangsan
}
fn();
}
}
obj.sayhello();
6补充
this在严格模式下绑定到 undefined,否则绑定到全局对象。
三元表达式嵌套
参考:三元表达式嵌套
条件1?真结果1:(条件2?真结果2:(条件3:真结果3?假结果3))
var res = x>0?1:(x=0?-1:2)
手机端左右滑动防止屏幕晃动
document.body.addEventListener('touchmove', function (e) {
//阻止默认的处理方式(阻止下拉滑动的效果)
e.preventDefault();
}, {passive: false}); //passive 参数不能省略,用来兼容ios和android
页面上有一个电子时钟,显示当前的年月日,时分秒,要求自动变化,具体表现如下图:
1)要求双位显示,例如:九点九分九秒,显示为09:09:09
<body>
<div></div>
<script>
var div = document.querySelector('div');
getTimer()
setInterval(getTimer, 1000);
function getTimer() {
var time = new Date();
var year = time.getFullYear();
var month = time.getMonth() + 1;
var dates = time.getDate();
var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
var day = time.getDay();
var h = time.getHours();
h = h < 10 ? '0' + h : h;
var m = time.getMinutes();
m = m < 10 ? '0' + m : m;
var s = time.getSeconds();
s = s < 10 ? '0' + s : s;
div.innerHTML = year + '年' + month + '月' + dates + '日' + arr[day] + h + ':' + m + ':' + s;
}
</script>
</body>
倒计时
function countTime() {
//获取当前时间
var date = new Date();
var now = date.getTime();
//设置截止时间
var endDate = new Date("2019-11-30 23:59:59");
var end = endDate.getTime();
//时间差
var leftTime = end-now;
//定义变量 d,h,m,s保存倒计时的时间
var d,h,m,s;
if (leftTime>=0) {
d = Math.floor(leftTime/1000/60/60/24);
h = Math.floor(leftTime/1000/60/60%24);
m = Math.floor(leftTime/1000/60%60);
s = Math.floor(leftTime/1000%60);
}
//将倒计时赋值到div中
document.getElementById("_d").innerHTML = d;
document.getElementById("_h").innerHTML = h;
document.getElementById("_m").innerHTML = m;
document.getElementById("_s").innerHTML = s;
}
setInterval(countTime,1000);
<body onload = "countTime()">
</body