JS注意事项

一、ECMAScript

1、数组相关

1.1 如果数组中的某一项的值是null 或者undefined,那么该值在join()、toLocaleString()、toString()方法返回的结果中以空字符串表示。

在这里插入图片描述

1.2 sort()方法是按字符串进行比较

sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,以
确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串。
在这里插入图片描述

1.3 concat()、slice() 创建新数组,不改变原数组

slice ()
如果slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位
置。例如,在一个包含5 项的数组上调用slice(-2,-1)与调用slice(3,4)得到的
结果相同。如果结束位置小于起始位置,则返回空数组。

1.4 splice() 删除、插入、替换数组项

splice() 会改变原数组。
splice()可接受多个参数:第1个参数表示起始位置,第2个参数表示需要删除的个数,后面的参数表示需要插入的参数。
在这里插入图片描述

1.5 数组的7个变异方法
  • push
  • pop
  • unshift
  • shift
  • splice
  • sort
  • reverse
1.6 ECMAScript5 的5个迭代方法
  • filter():对数组中的每一项运行给定函数,返回该函数会返回true 的项组成的数组。
  • forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
  • map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
  • every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
  • some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。

以上迭代方法都可以包含两个参数,第一个参数是要在数组项上运行的函数,第二个参数是运行函数的作用域对象。
运行函数包括三个参数,第一个参数是数组项,第二个参数是索引值,第三个参数是数组本身

2、alert(args)调用时会将参数转为字符串

由于alert()要接收字符串参数,所以其参数在后台自动调用toString()方法,由此
会得到与直接调用toString()方法相同的结果。

3、Function

由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能会有多个名字。为了说明这点,让我们看看实例:

function add(n1,n2){
	return n1 + n2;
}
console.log(add(5,5)); //10
var otherAdd = add;
add = null;    //将add置为null,只是add的指针为null,函数依然存在
console.log(otherAdd(5,5)); //10

在这里插入图片描述

4、自由变量和作用域

4.1、自由变量

变量不是在调用它的函数(作用域)中声明的,即跨作用域声明的变量为自由变量。
这里我们简单举例说明下:
在这里插入图片描述

4.2 作用域

自由变量的作用域是在定义时确定的(而不是调用的时候)。
函数中this取何值,是在函数被调用执行的时候确定的(而不是函数定义的时候)。
在这里插入图片描述

4.3 this

1) 如果函数作为对象的属性被调用时,函数中的this指向该对象。
在这里插入图片描述

2) 如果函数不作为对象的属性被调用时,函数中的this指向window。
在这里插入图片描述
3) 当函数被call或apply调用时,函数中的this指向传人的对象。
在这里插入图片描述
4) 普通函数调用,其this指向window

示例1:全局作用域下的函数调用,this指向window

var obj = {
	key : "Hi"
}
var fn = function(){
	console.log(this); //window对象
	console.log(this.key); //undefined
}
fn() //普通函数调用

示例2:局部作用域下普通函数调用,this指向window

var obj = {
	key : "Hi",
	getKey : function(){
		function fn(){
			console.log(this); //window对象
			console.log(this.key); //undefined
		}
		fn(); //普通函数调用
	}
}
obj.getKey()

函数fn虽然是在obj.getKey内部定义的,但是它仍然是一个普通的函数,this仍然指向window。

5、原型链

在这里插入图片描述
(注:原图地址https://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/figure1.jpg)

6、对象深拷贝和浅拷贝

对象拷贝详见:https://blog.csdn.net/yihanzhi/article/details/90645065

7、toString和valueOf

valueOf偏向于运算,toString偏向于显示。

对象隐式转换时,譬如对象o和数值做比较运算,优先调用valueOf;
若toString重写了,则先调用toString;若都重写或都没重写均优先调用valueOf

二、history

1、hash

hash仅仅是客户端的一个状态,当向服务器发请求的时候,hash部分并不会发过去。

三、浏览器相关

1、没有设置过期时间的cookie什么时候失效

不设置cookie过期时间的话,会在关闭浏览器的时候销毁。

参考:《JavaScript高级程序设计(第3版)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值