JS注意事项

小咪咪 2022-01-31 02:59 502阅读 0赞

一、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

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

  1. function add(n1,n2){
  2. return n1 + n2;
  3. }
  4. console.log(add(5,5)); //10
  5. var otherAdd = add;
  6. add = null; //将add置为null,只是add的指针为null,函数依然存在
  7. 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

  1. var obj = {
  2. key : "Hi"
  3. }
  4. var fn = function(){
  5. console.log(this); //window对象
  6. console.log(this.key); //undefined
  7. }
  8. fn() //普通函数调用

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

  1. var obj = {
  2. key : "Hi",
  3. getKey : function(){
  4. function fn(){
  5. console.log(this); //window对象
  6. console.log(this.key); //undefined
  7. }
  8. fn(); //普通函数调用
  9. }
  10. }
  11. 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部分并不会发过去。

三、浏览器相关

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

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

发表评论

表情:
评论列表 (有 0 条评论,502人围观)

还没有评论,来说两句吧...

相关阅读

    相关 爬虫注意事项

    提到爬虫大家可能都不陌生,简单来说,爬虫就是用代码来请求互联网资源,至于怎么处理获取到的互联网资源,其实已经不在爬虫的知识范围之内了。我是一个做java开发的,所以自然也有用j

    相关 JS注意事项

    一、ECMAScript 1、数组相关 1.1 如果数组中的某一项的值是null 或者undefined,那么该值在join()、toLocaleString()