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() 阻止传播