Javascript知识整理

一、类型和变量

1. js中数据类型分为两类:原始类型和对象类型。原始类型包括数字、字符串和布尔值

2. 对象是属性的集合,每个属性都由键值对构成。

3. 字符串是由字符组成的数组,它是不可变的

4. 在任何使用二进制浮点数的编程语言,都会遇到浮点精度问题。使用大整数进行重要计算可以减小误差(更细小的单位)

5. 两个date对象可以进行加减法以计算时间

6. 数字和字符串并不是对象,但他们拥有方法。原因是当调用他们的方法时,会自动执行 new String/Number来生成一个临时对象。当引用结束,临时对象将被销毁

7. 如果想进行对象/数组复制,必须显式复制对象的每个属性或数组的每个元素。同样的如果要比较两个单独的对象或数组,也需要如此

8. js中没有块级作用域(直到ES 5),只有函数作用域和全局作用域

9. 在函数中,变量的声明会被提前至函数顶部,但初始化仍在原来的位置。这被称为“声明提前”

10. 当声明全局变量时,其实是定义了全局对象的一个属性,所以可以使用delete删除它们

11. 当定义一个函数时,其实保存了一个作用域链。当调用这个函数时,它创建一个新的对象来存储它的局部变量,并将这个对象添加到保存的那个作用域链上。同事创建一个新的更长的表示函数调用作用域的“链”

二、表达式和运算符

1. 严格相等运算符 “===” 首先计算其操作数的值,比较过程没有任何类型转换

2. NaN与任何指都是不相等的,包括它自身

3. instanceof操作符希望左侧是一个对象,右侧是标识对象的类。如果左侧对象是右侧类的实例,则返回true

4. eval() 只有一个参数,如果传入的参数不是字符串,它直接返回这个参数,如果参数是字符串,它会把字符串当成js代码进行编译。如果编译成功,则开始执行这段代码,并返回字符串中最后一个表达式或语句的值

5. typeof放在单个操作数的前面,操作数可以是任意类型。返回表示操作数类型的一个字符串

6. delete是一元操作符,用来删除对象的属性或数组的元素

三、语句

1. 使用var name = function 和 直接使用function 声明的函数有一点区别,使用函数声明语句定义的函数会被提前,无论函数定义还是函数体,它对整个作用域都是可见的。而使用函数定义表达式声明的函数则只有声明被提前(与var声明变量一致)

2. switch后面的expression判断是使用 “===” 进行比较的

3. 抛出异常时,Javascript解释器会立即停止当前正在执行的逻辑,并跳转到就近的异常处理程序。如果抛出异常的函数没有异常处理程序,异常会沿着Javascript方法的词法结构和调用栈向上传播。如果没有找到任何异常处理程序,Javascript将把异常当做错误来处理,并报告给用户。

4. with对象是用来扩展作用域链,绝大多数情况下都不应该使用

四、对象

1. 除了字符串、数字、true、false、null和undefined之外,Javascript中的所有值都是对象

2. 除了名字和值之外,每个属性还有一些与之相关的值。成为“属性特性”

3. 可以通过直接量、关键字new和Object.create() 函数来创建对象

4. Object.create() 是一个静态函数,使用它的方法是传入所需的原型对象

  var child = Object.create(father)

5. 可以通过Object.create(null) 来创建一个没有原型的新对象,但通过这种方式创建的对象没有继承任何基础方法,例如toString()。也就是说它不能和 “+” 运算符一起正常工作

6. 如果想创建一个普通的空对象,可以使用{} 或 new Object() 或 Object.create(Object.prototype)

7. 可以通过对象直接读取原型中的属性,但给这个属性赋值并不会影响原型中的值

8. delete运算符只能删除自有属性,不能删除继承属性

9. 可以使用对象的hasOwnProperty() 方法来检测给定的名字是否是对象的自有属性,对于继承属性它将返回false

10. propertyIsEnumerable() 是hasOwnProperty()的增强版,只有检测到自有属性,并且这个属性可枚举时才会返回true

11. 每个对象都有原型、类和可扩展性

12. ES 5提供了内置函数JSON.stringify() 和JSON.parse() 用来序列化和还原Javascript对象

五、数组

1. Javascript数组是无类型的,数组元素可以是任意类型,并不一定是常亮,也可以是变量

2. Javascript数组是动态的,根据需要他们会增长或缩减

3. Javascript数组可能是稀疏的,数组元素的索引不一定是连续的,他们之间可以有空缺

4. 足够稀疏的数组通常在实现上比稠密的数组更慢、内存利用率更高,在这样的数组中查找元素的时间与常规对象属性的查找时间一样长

5. 数组的length属性有三个特殊行为:

  1. 如果为一个数组元素赋值,它的索引超出或等于当前长度时,length自动变为 n + 1
  2. 当length被赋值小于当前数组长度时,数组会被截取
  3. 当length被赋值大于当前数组长度时,数组不会默认添加新的元素,只是在尾部留出一段空白区域

6. Array.push() 方法向数组末尾添加一个元素,使用Array.pop() 可以删除末尾的一个元素,数组索引会自动维护

7. Array.unshift() 方法向数组顶部添加一个元素,使用Array.shift() 可以删掉数组的第一个元素,数组索引会自动维护

8. Array.json() 方法,用于将数组中的所有元素转为字符串并连在一起,默认使用 “,” 连接。也可以传入连接符。

9. Array.reverse() 方法将数组中的元素颠倒顺序,返回逆向的数组。它采用替换,原数组将被改变

10. Array.sort() 方法将数组中的元素排序并返回排序后的数组,当不带参数调用sort() 时,数组元素以字母表顺序排序

11. Array.concat() 方法创建并返回一个新数组,它的元素包括调用concat() 的原始数组,和concat() 的每个参数

  var a = [1, 2, 3]

  a.concat(5, 6)  // a = [1, 2, 3, 5, 6]

12. Array.slice() 方法返回数组的一个片段,它返回索引从第一个数字到但不包含第二个数字的数组

13. Array.splice() 的前两个参数指定了需要删除的数组元素,从第三个参数开始,将依次插入以参数1为索引的位置

  var a  = [1, 2, 3]

  a.splice(1, 0, ‘a‘, ‘b‘, ‘c‘)  // a = [1, 2, ‘a‘, ‘b‘, ‘c‘, 3]

14. ES 5中可以使用Array.isArray() 函数来判断该对象是否为数组。ES 3中的 isArray() 函数的代码如下:

1 var isArray = Function.isArray || function(o) {
2     return typeof o === ‘object‘ &&
3     Object.prototype.toString.call(o) === ‘[object Array]‘
4 }

五、函数

1. 当方法不需要返回值时,最好就是返回它本身(this),这样就可以进行 “链式调用”

2. 在调用函数时,如果传入的实参比函数声明时所指定的形参要少,则缺省的形参将被赋值为undefined

3. 函数对象可以通过作用域链联系起来,函数体内部的变量都可以保存在函数作用域内,这种特性在计算机科学文献中被称为“闭包”

4. 从技术的角度讲,所有的Javascript函数都是闭包,他们都是对象,他们都关联到作用域链

5. 如果函数定义了嵌套的函数,并将它作为返回值返回或存储在某处的属性里,这时就会有一个外部引用指向这个嵌套的函数。他不会被当做垃圾回收,并且它所指向的变量绑定对象也不会被当做垃圾回收

6. 函数体内的arguments.length表示传入函数的实参的个数,函数对象本身的length属性则表示形参的个数

7. call() 和 apply() 都用来调用方法,第一个参数都是this,区别在于第二个参数,apply传入的是数组,而call则直接传入参数列表。

  以对象o的方法形式调用函数f(),可以写成这样:

  f.call(o, 1, 2)

  f.apply(o, [1, 2])

8.ES 5 中的bind() 方法可以将函数绑定至某个对象,在ES 3中可以轻松模拟:

  

 1 function bind(f, o) {
 2     if (f.bind) {
 3
 4         return f.bind(o)
 5
 6     } else {
 7
 8         return function() {
 9
10             return f.apply(o, arguments)
11         }
12     }
13 }
时间: 2024-11-02 19:13:57

Javascript知识整理的相关文章

javascript知识整理之this

js中的this是一个头疼的问题,尤其对于笔者这种初级的菜鸟来讲,下面梳理下this的知识,可以当做是初级进阶也好入门也罢,总归输出的才是自己掌握的: Js中this不是由词法作用域决定的 而是调用时动态指定,这就有点麻烦了,如果不能明确知道函数调用时的词法作用域this的指向也就只能靠猜了,算一卦这种模式不是不推荐而是根本不能用,要是真的不能确定this指向 可以查一下调用栈 或是上个断点之类的,当然alert这种较为原始的方法也是有效的不过确实有点low; Js函数调用方式大致可以归为四类(

Javascript正则表达式知识整理

Javascript正则表达式知识整理 1.正则表达式思维导图 2.正则表达式常用示例 2.1 移除所有标签,只留下innerText var html = "<p><a href='http://www.baidu.com/'>Ruby Louvre</a>by <em>test</em></p>"; var text = html.replace(/<(?:.|\s)*?>/g, "&qu

Kali Linux渗透基础知识整理(二)漏洞扫描

Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网络上传输的数据量. TCP协议 TCP是因特网中的传输层协议,使用三次握手协议建立连接.当主动方发出SYN连接请求后,等待对方回答SYN+ACK ,并最终对对方的 SYN 执行 ACK 确认.这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议. 连接建立 TC

JAVA基础知识整理

一.首先先明白get与post的基本定义和区别: 这是两种在客户端和服务器端进行请求-响应的方法. 1get:从指定的资源请求数据. 2post:向指定的资源提交要处理的数据. get基本上用于从服务器取回数据,注意:get方法可能返回缓存数据. post可以从服务器上获取数据,不过,post方法不会缓存数据,并且常用语连同请求一起发送数据. 二. Jquery $.get()方法. $.get()方法通过Http Get发起请求,从服务器上请求数据. 语法:&.get(URL,callback

js事件(Event)知识整理

事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下 鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemove 如果按下鼠标上的设备(左键,右键,滚轮--),则触发mousedown 当设备弹起的时候触发mouseup 目标元素的滚动条发生移动时(滚动滚轮/拖动滚动条..)触发scroll 滚动滚轮触发mousewheel,这个要区别于scroll 鼠标移出元素的那一刻,触发mouseout 事件注册 平常

requirejs入门知识整理

使用模块化开发处理的三大问题: 1.命名冲突:2.繁琐的文件依赖 3.实现异步非阻塞的文件加载,避免网页失去响应 模块化的设计使得JavaScript代码在需要访问“全局变量”的时候,都可以通过依赖关系,把这些“全局变量”作为参数传递到模块的实现体里,在实现中就避免了访问或者声明全局的变量或者函数,有效的避免大量而且复杂的命名空间管理. requirejs以一个相对于baseUrl的地址来加载所有的代码.如果用了data-main属性,则该路径就是baseUrl,baseUrl亦可通过requi

我是这样记录javascript知识的------Day31

在陆续研究了几个javascript的几个小应用后,也算对javascript有了更深一点的认识,头脑中大约都有些印象,整体上说却有些模糊,这时,我知道,是时候看看w3cshool的这部分介绍了. 没办法,我也曾试过一开始就去看这w3cshool,可那铺天盖地的各种理论让我是苦不堪言,单纯的去背这些,真的有些难度,我习惯了"重塑"的方法记忆事物,所谓"重塑"是我自己想的一个词,就是将它理解了,用自己的语言整理出来,在脑海中能记录几个实例,并能从几个实例中整理出骨架来

JS知识整理之 Call&amp;Apply方法

JavaScript中的函数也是对象,和其他JS对象一样也可以包含方法,其中Call和Apply就是其中比较重要的方法,可以用来间接的调用函数.这两个方法允许显式制定调用所需的this值,也就是说所有函数可以作为任何对象的方法来使用,哪怕这个函数不是那个对象的方法. Call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) Apply方法: 语法:apply([thisObj[,argArray]]) Call和Apply方法作用相同,但从以

J2EE知识整理(一)

学习伊始,抱着一本厚厚的<JavaXXXX>看了一周,什么swing,swt看的是心花怒放,哇,这玩意学会了,可以自己做游戏了~~~,正式接手项目顿时傻了眼...这尼玛怎么做的...只能重新看HTML(哎,现在想想当初傻不拉几的,CS/BS都没搞清,方向完全错误),还好课题组用的是框架,里面还有已经完成的页面,这下好说了,自己做我不会,照着CV就好,我们不是程序员,只是代码的搬运工,陆陆续续也做了十几个项目了,一直感觉基础不牢靠,要不,咱从头来一遍. 青春,总要有一次说干就干的项目. 一.从M