js学习总结1

  1. 任何涉及NaN的操作都返回NaN,NaN与任何值的关系比较都是false,包括NaN
  2. es5没有块级作用域,es6引入。
  3. body底部放script标签加快加载速度
  4. href表示超文本引用,用在link和a等元素上,href是引用和页面关联,是在当前元素和引用资源之间建立联系,src表示引用资源,表示替换当前元素,用在img,script,iframe上,src是页面内容不可缺少的一部分。
  5. 字符字面量=转义序列,\n,\t,\b,\r(回车)\,(),\xnn(16进制字符)、\unnnn(六个字符代表一个字符,Unicode编码),注意:都只占一个字符
  6. ECMAscript是标准,javascript是语言,还包括dom跟bom
  7. 0.1+0.2不等于0.3的问题:
    计算机表示(计算机以二进制储存数据)浮点数方式:
    ① 整数部分:除2取余数,若商不为0则继续对它除2,当商为0时则将所有余数逆序排列;
    ② 小数部分:乘2取整数部分,若小数不为0则继续乘2,直至小数部分为0将取出的整数位正序排列。(若小数部分无法为零,根据有效位数要求取得相应数值,位数后一位0舍1入进行取舍)
    利用上述方法,我们尝试一下将0.1转成二进制:
    0.1 * 2 = 0.2 - - - - - - - - - - 取0
    0.2 * 2 = 0.4 - - - - - - - - - - 取0
    0.4 * 2 = 0.8 - - - - - - - - - - 取0
    0.8 * 2 = 1.6 - - - - - - - - - - 取1
    0.6 * 2 = 1.2 - - - - - - - - - - 取1
    0.2 * 2 = 0.4 - - - - - - - - - - 取0

    算到这就会发现小数部分再怎么继续乘都不会等于0,所以二进制是没办法精确表示0.1的。
    那么0.1的二进制表示是:0.000110011…0011… (0011无限循环)
    而0.2的二进制表示则是:0.00110011…0011… (0011无限循环)
  8. 补码计算方式,正数不变,负数绝对值取反加一
  9. 逻辑移位最简单,不管左移右移,移出来的空位补0即可。算术右移,左移补0,右移补符号位。
  10. ECMAScript函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数, 也不在乎传进来参数是什么数据类型。 也就是说, 即便你定义的函数只接收两个参数, 在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。之所以会这样.原因是ECMAScript中的参数在内部是用一个数组来表示的。 函数接收到的始终都是这个数组, 而不关心数组中包含哪些参数(如果有参数的话)。如果这个数组中不包含任何元素,无所谓;如果包含多个元素, 也没有问题。 实际上, 在函数体内可以通过arguments对象来 访问这个参数数组,从而获取传递给函数的每一个参数。
    其实,arguments对象只是与数组类似(它并不是Array的实例〉, 因为可以使用方括号访问它的每一个元素(即第一个元素是arguments[0],第二个元素是argumetns[0],使用length属性来确定传递进来多少个参数。命名的参数只提供便利,但不是必需的ESMAScript没有传统意义上的重载,重复定义一个函数会导致覆盖,如果你想重载,就利用对参数的数量以及类型的判断做出不同的反应来mock重载吧。
  11. Javascript不允许直接访问内存,如果想操作对象,只能操作对象的引用。
  12. 复制引用类型是复制引用,复制基本数据类型是复制值,参数按值传递(也就是复制),规则如前面所述。我们来看一个例子:
 function setName(obj){
 obj.name="gyz';
 obj =new Object();
 obj.name='poor';
 }
 var person=new Obeject();
 setName(person);
 concole.log(person.name);

> javascript高级程序设计

如果person是传递引用,则person会被指定到新的对象,则会打印poor,而js是传递引用的值(复制),则这里只是将复制的引用指向了一个新的对象,而person的name由于之前的操作会变成gyz(由11)。

  1. typeof检测基本类型有效,而引用类型通通返回Object,包括null,如果想检查引用类型,请用instanceoof操作符,语法如下:
result= variable instanceof consιrυctor

所有的引用类型都属于Object,识别方法:原型链(稍后介绍)。

  1. var定义的变量会添加到最近的content中(未定义之前是undefined),如果没有var申明则自动添加到全局content,'use strict’模式下不允许。let(es6)不会变量提升,使用let命令所声明的变量在定义之前都是不可用的。在语法上,称为“暂时性死区”(temporal dead zone)TDZ。
  2. 垃圾回收方式:标记清除(mark and sweep)、引用计数(reference counting)
  3. 用arguments.callee防止函数名耦合,请看下面例子:
//阶乘函数
function factorial(num){
if(num<=1)
return 1;
else return arguments.callee(num-1)*num//1
}
var trueFactorial=factorial;
factorial=function(){
return 0;
}
如果1处不用argument.callee而直接用factorial,
则trueFactorial(5)返回0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值