额外的:
数组中元素中可以类型不同,显示js是动态类型
数组Array和Function都是对象的扩展
+new Date() = new Date().getTime()
encodeURLComponent比encodeURL多一个将冒号也转义的功能
类型转换:
最多的类型转换就是string类型和number类型的彼此转换,
string----->number: 可以乘1,或者字符串前加一个一元运算符+,字符串不能转换就会返回NaN,用函数isNaN判断
全局函数parseInt和parseFloat函数转换,第一个参数就是字符串,第二个参数可选,可以传数的进制,直到解析到非法字符为止
number----->string: 加一个空串就好
函数(2个概念:函数表达式、闭包;1个属性2个方法:属性caller方法call、apply;1个相关项:arguments:2个属性length、callee,对象但可以数组访问特性)
具体如下:
函数表达式的概念和语法 (函数表达式)()表达
函数声明语句其实也是将函数表达式值赋给函数名,但只有在语句中这种赋值能解析,(function funName(){})()这种不会发生赋值
arguments对象,保存所有传入的参数,可以像数组一样下标访问(但它是对象),还有length和callee属性,分别表示参数表长度和所属的函数
由于js方法签名无法相同,所以length属性配合switch-case可以用来模拟重载
函数本身也是对象,有caller属性,表示调用自己的函数,调用函数还可以通过fun.call(arg1,arg2.... )方式,arg1传入代替函数内部的this指针,后面就是参数列表,call是函数对象的一个方法,类似的还有apply
闭包:函数中还可以定义函数,这些内部函数本身和对变量的存活周期都符合块作用域规则,同时内部函数被外部函数当成表达式返回的话,闭包会自动保存内部函数所需要访问的临时变量,这个可以用来模拟类的私有变量
有个比较好的写法:arguments.callee.caller
类:
基本概念:
一切皆对象,并且根是Object,和java一样;
跟Object的自带方法是toString()和valueOf()方法
虽然有包装类,但是不会自动执行,因此基本类型instanceof 对应的包装类会返回false
封装:私有化就通过闭包实现,函数内部本身没有字段,闭包自动保存外层函数的临时变量
继承:每个方法有个静态属性对象prototype,SubClass.prototype=new SuperClass 就可以了,但是一定要在new对象之前(这个怎么都不理解。。。。),这里有个构造参数问题,在子类里利用call函数加上superClass.call(this,arguments list)就可以了
多态:貌似没这个东西
对象的创建:new fun()和fun()都会执行函数,但new fun()会自动返回一个对象,因此如果函数本身返回一个对象就会覆盖原始应该的对象,而fun()该怎么就怎么
另外:
方法调用的时候this指针谁调用就指向谁,最外层就是Window
创建对象后直接用.运算符就可以加上任何属性,或者.prototype.attribute = value