犀牛书 notes

https://www.evernote.com/shard/s20/sh/83c1aced-abdf-4866-a6a1-8f247815b5c2/eec821d6a4fb9940ff7deea4c190d713

 

 

 

数字类型是浮点型

 

常规数组用 数字 做下标

 

关联数组用 字符串 做下标

 

 

 

image.width  也可以  image["width"]

 

 //第2种方法[]里面是个字符串  这个就有很大的灵活性  因为可以放一个字符串变量  在运行时决定真正要读的属性

 

 //字符串是动态的  属性标示符是静态的

 

 //第2种方法把对象叫关联数组 实际在js内部是用关联数组实现对象的

 

 

 

var a =  new Array();

 

a[0] = 1.2;

 

a[1] = true;

 

//数组可变长度?

 

 

 

 

 

 

 

 

 

对基本类型的自动包装   Number  String Boolean

 

 

 

js函数体代码执行时会首先扫描所有变量定义  然后才处理代码逻辑

 

var scope = "global";

 

function f(){

 

     alert(scope);    //显示undefined  因为首先扫描到局部定义   把全局的屏蔽了  但此时赋值的代码又未执行

 

     var scope = "local";

 

     alert(scope);

 

}

 

 

 

in 运算符  

 

  左边的是一个字符串 右边的是一个对象或数组  如果左边的值是右边的一个属性名, 返回true

 

 "name"  in  {name:1,age:23}     // true

 

 

 

 

 

instanceof 运算符

 

  d instanceof Date  // 左边是对象   右边是类名

 

 

 

typeof 运算符

 

  返回 number  string  boolean  object   function  undefined

 

 

 

delete 运算符

 

  删除属性引用?

 

 

 

 

 

对象属性的枚举

 

for (var pname in myobject){

 

}  //pname 是属性名  myobject[pname] 是 属性值

 

 

 

 

 

函数定义在解析时发生,不是在运行时发生

 

 

 

with (object)

 

     statement  //把object 加到作用域链的头部

 

 

 

 

 

函数的实际参数  arguments[]对象

 

     调用函数时可以传超过定义的参数个数  然后访问arguments[]去获取

 

 

 

函数内参数 callee   

 

      //引用函数自身  可以方便的拿到未命名的函数引用

 

 

 

 

 

arguments.length 是实参的数目   Function.length 是形参的数目

 

     var actual = args.length;

 

     var expected = args.callee.length;

 

 

 

 

 

call()

 

     f.call(o,1,2);

 

     o.m = f;

 

     o.m(1,2);

 

     delete o.m;

 

 

 

apply() 和 call相似  只不过参数是数组    f.apply(o,[1,2]);

 

 

 

 //为什么要这样?

 

 //对象上的函数叫方法  方法和普通函数有一个区别  this关键字的指向  在方法中this指向对象    所以o.m=f后    如果f中有代码this的话  这时this就指向o了

 

 //而普通函数中的this指向的是全局对象      this的指向是函数和方法的主要区别

 

 

 

 

 

prototype

 

  原型对象   原型对象属性读的时候, 如果实例没有,就会去原型上读,(大大减少每个对象对内存的需求量)但如果写入的话,是会在实例上创建一个并写在实例上的,并以后读该属性都是在实例上读了

 

 

 

constructor  

 

     //指向构造函数   这个属性是从原型继承而来 即此属性在原型上 假如原型被替换成其他对象  那个对象不一定有constructor属性

 

     var o = new Complex(1,2);

 

     o.constructor == Complex  // true

 

     f.prototype.constructor == f //true

 

 

 

hasOwnProperty()

 

 判断一个属性是否挂在对象本身上的 挂在原型上是false  假如找不到也是false    o.hasOwnProperty("name")

 

 

 

isPrototypeOf()

 

     Object.prototype.isPrototypeOf(o)   //true

 

 

 

 

 

 

 

数组不过是一个具有额外功能层的对象

 

 

 

js数组是稀疏的 数组下标不会落在一个连续的数字范围内 

 

var c = new Circle();

 

c[0] = "xxxx";    //只是添加了一个名为0的属性  将数组元素添加到对象不会使他成为数组

 

 

 

数组的length总是比最大元素的下标多1  即使在稀疏的情况下

 

     length值可写  设置一个比实际小的数   数组会被截断 长度之外的元素会被抛弃

 

     一般的对象没有length属性  length属性成了数组最重要的特性

 

 

 

   join()  数组的元素转换成字符串,用逗号分隔符连起来 

 

     a = [1,2,3]   a.join() // "1,2,3"   a.join(",")  //"1, 2, 3" 后面的有空格

 

 

 

   reverse()   翻转整个数组

 

 

 

 

 

 

 

window == this // true  window就是顶级全局对象

 

document == window.document  //true

 

 

 

 

 

navigator 

 

     包含web浏览器的总体信息   // for(var p in navigator) document.write(p+":"+navigator[p]+"<br>");

 

 

 

document

 

     //for(var p in document) document.write(p+":"+document[p]+"<br>");

 

 

 

 

 

cookie

 

     name=value;path=path;domain=domain;expires=expires;secure=secure;

 

 

 

     expires 生存周期

 

     path  cookie可见性 只对path的同一目录或子目录的页面可见

 

     domain  跨域 访问   不能将一个cookies域设置成服务器所在的域之外的域

 

     secure   是否只在https时才传输cookies

 

     不能有分号  逗号  空白符  所以存时要escape() 读的时候unescape()

 

 

 

 

 

event

 

     type //click   mouseover

 

     target 发生事件的节点

 

     currentTarget  传播到的节点

 

     timeStamp  何时发生

 

     bubbles 是否在文档树起泡

 

     stopPropagation()  阻止传播

 

你可能感兴趣的:(Note)