前言:
因为工作需要,所以开始主攻前台JS方面的技术。在以前的工作中,使用过这门脚本语言。但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用。
不会考虑到代码优化,封装对象等。今次特意借了这本《javascript 高级程序设计》 ,在每个晚上抽出一个小时来看这本纸质书,系统的学习这门语言。
本文中摘录的都是一些在阅读中,感觉比较重要的信息。如果文中出现差错,欢迎园友拍砖。
摘录:
数据类型
undefined 使用var声明 但未对其初始化
Null null值
Boolean 布尔型
Number 整数 浮点 parseInt("10",2) parseFloat
String 字符串 toString()
Object 对象 :
构造函数 new Object()
hasOwnProperty(propertyName) 实例中是否有给定的属性
isPrototypeof(object) 传入对象是否是另一个对象的原型
propertyIsEnumerable
toString()
valueof()
/
typeof() 函数结果(undefined boolean string number object function)
操作符
for-in:精确迭代语句,枚举对象属性
for(var propName in object){
alert(propName):
}
函数
参数名:非必须 有内置参数数组 arguments
function say(){
alert(argumenyt[0+" "+argument[1]);
}
say("jon","22");
变量 作用域和内存
基本类型:保存在栈内存的简单数据段,该值被完全保存在内存中 typeof()
引用类型:堆内存中的对象,变量中保存的只是指针 指向该内存中的值 object instanceof array
垃圾回收机制
标记清除
引用计数
引用类型
var person = new Object()
person.name = "lili";
person.age="12";
var person = {name:"lili",agr:12 };
array类型
var color = new Array(3); //创建出长度为3 的数组
var color = new Array("red","yellow","blue");
var color = ["red","yellow","blue"];
数组下的toString() toLocaleString() 该两个方法默认会调用数组下每项的toString()方法
若toLocaleString()被重写,则调用重写后的toLocaleString()
数组下的push() 及pop()方法。
push() 将项推入数组中,并返回数组的count
pop() 取到数组的最后一项 count值被减少
数组重排序reserse() sort()
reserse() 将数组进行反转
sort() 调用每项的toString()方法 然后按照升序排列数组
concat() 将数组进行合并
引用类型:函数内部属性
global对象 作为ECMAScript的终极对象,从任何角度看 都不存在。但是不属于任何其他对象的属性和方法 最终都是它的属性和方法
isNaN() isFinite() parseInt() parseFloat()
1. 编码方法
encodeURI() 不会对本身属于URI的特殊字符进行编码
函数内部有两个特殊对象 arguments 和 this
arguments 包含了函数中所有的传入参数,该对象包含了callee属性,指向拥有arguments的函数
例如例子
function as(num){
if(num>1){
as(num -1);
}else{
break;
}
}
可消除函数体与函数名的耦合度
function as(num){
if(num>1){
arguments.callee(num -1);
}else{
break;
}
}
this 引用的是函数据以执行操作的对象 或者说函数在执行时的作用域
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
sayColor(); red
o.sayColor = sayColor;
o.sayColor(); blue
函数属性和方法
ECMAscript 中的函数也是对象 因此函数也有属性和方法
每个函数包含了两个属性
length:函数希望接受的命名参数的个数
prototype:
函数自带两个方法,可在特定作用域中调用函数
apply() :需要传入两个参数; 一个是函数运行的作用域。 另一个是传入参数的数组(or array or arguments对象)
call(); 一个是函数运行的作用域 而后剩下的参数是必须一一列举
此二者方法可以相同效果 可以根据实际参数来选择调用
而通过该函数的调用 可以扩充函数运行的作用域.实际上函数改变了this的值
window.color = "red";
var o = {color :"blue"};
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue
apply() :需要传入两个参数; 一个是函数运行的作用域。 另一个是传入参数的数组(or array or arguments对象)
call(); 一个是函数运行的作用域 而后剩下的参数是必须一一列举
此二者方法可以相同效果 可以根据实际参数来选择调用
而通过该函数的调用 可以扩充函数运行的作用域.实际上函数改变了this的值
window.color = "red";
var o = {color :"blue"};
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue
内置对象
global对象 作为ECMAScript的终极对象,从任何角度看 都不存在。但是不属于任何其他对象的属性和方法 最终都是它的属性和方法
isNaN() isFinite() parseInt() parseFloat()
1. 编码方法
encodeURI() 不会对本身属于URI的特殊字符进行编码
encodeURIComponent() 会将对应编码替换所有非字母数字字符
2.eval() 执行ECMAScript字符串
eval("alert('hi')"); 等价于 alert('hi')
当解析器发现调用eval() 方法时 会将传入的参数 当成ECMAScript来解析 然后将执行结果插入到原位置
通过eval()执行的代码被认为是包含该次调用的执行环境的一部分,因为有执行环境相同的作用域。