一: 关于基本数据类型在栈内存和堆内存中的关系
基本数据对于栈内存和堆内存是可以复制的,可以把a变量里的数据赋值给b变量同时在栈内存里面为每个变量各保存一个对象,改变其他某个变量的值将不影响其他对变量的值。
在此num1与num2保存着相同的值,但是他们是完全独立的,相互做任何操作不受影响。
列子2: var obj1 = new object();
var obj2 = obj1;
obj1.name = 'Nicholas';
alert(obj2.name);//'Nicholas'
在此obj1与obj2保存着同样的值,他们两个实际上是一个指针,多指向堆内存中的一个对象,因此他们是相互受影响的,改变其中一个,就会影响到另一个。
二:关于复杂数据类型在栈内存和堆内存中的关系
复杂数据对于栈内存和堆内存他们只指向同一个对象,不会因为堆内存里多个变量赋值后在栈内存里面产生多个对象,其中改变某个变量的值将影响其他变量的值,只有创建一个新对象,并将原对象的属性用forin语句遍历出来赋值给新对象,这样栈内存里就有了两个对象了,改变其中某一个对象不会影响另一个对象。
三:关于对象
创建新对象有两种写法:1var a = new object();2var a = {};
对于创建的新对象我们也可以为其添加属性和方法:a.name = 'attributively';
alert(a.name); (结果)//attributively
访问属性:1 对象.属性 = 属性值(以点来访问对象的属性)2对象 = {属性 :属性值};(以冒号访问属性) ;
对象有个索引值的概念,他类似数组的下标,也是用访问数组下标的形式访问它的索引值,如:classes['today'];这是访问classes对象中的today属性。
classes[topclass]这种形式一般是当对象的属性是可变的,动态的时候才用这种形式访问或者改变的。。。
修改属性默认特性(低版本浏览器不支持这些属性):
var ceShi = {};
ceShi.name = 10;
Object.defineProperty(ceShi, 'name', {writable:false});// 设置该对象属性值不能被修改Object.defineProperty(ceShi, 'name', {configurable:false});//设置该对象的属性不能被删除
四:创建数组:
创建数组有两种写法:1var = a = new Array();2var a = [];
数组的排序方法是由数字排第一,字母第二,文字第三且有顺序的排列;
五:字面量概念:
字符串字面量是不需要创建过程就可使用的对象,所以它既没有变量那样的声明或者定义(字符串字面量是无名对象),也不需要象动态分配的对象那样进行动态分配。由于这个原因,用来限定变量的类型限定符(如 const、volatile)以及存储类别指示符(如 extern、static、auto、register)不能用在修饰字符串字面量上。
六:有关于变量环境搜索方式相关概念
1、所有全局变量和函数多事作为window对象的属性和方法创建的。
2、每个环境多可以向上收缩作用域链,以查询变量名和函数名;但任何环境多不能通过向下搜索作用域链而进入另一个执行环境。
3、
合法的变量名遵循的规则:1第一个字符必须是一个 ASCII 字母(大小写均可),或一个下划线(_)。注意第一个字符不能是数字。
2:后续的字符必须是字母、数字或下划线。
3:变量名称一定不能是 保留字。
七:函数的参数概念:
定义函数的参数我们可以把它当做一个局部变量,局部变量他执行完后就会销毁,而全局变量只有当你关掉网页才会销毁
参数分为形参和实参,形参就相当于当前函数的一个局部变量,实参就是调用的时候,
所传的参数,
就必须是有值的变量或常量或者字符串。
八:函数相关问题
1 多个相同的元素就可以创建一个数组保存2不同的则该创建一个对象保存。
3、把一个函数赋值给一个变量,结果是把这个函数返回的结果赋值给了这个变量。
九:关于面相对象的程序设计:
关于面向对象的程序设计要掌握的基本几点:1 要有类的概念,把属性方法一样的相似的东西抽象为一类。
2: 类的继承3: 类里面的属性方法可以单独改变、
十:通过用函数定义一个方法并在相同效果情况下调用
在我们做js效果的时候常常会遇到很多情况下多是做同一种效果,因此,js代码也差不多,可以说是一样。
在这种情况下,有些人会在每个函数里多写上显示这种效果的方法,包括我自己也是,这样的话,要是很多样子多是这种效果的话,那我们的js就要写很多代码了。当我昨天在做一个文件栏的时候,每一个栏目多是一样的事件,偶尔想到用一个函数把每个栏目一样的几个事件用方法定义在一个函数里面。
这样哪里需要这种效果,调用这个函数就可以了,还有就是可以节省很多代码。
定义一个onclick点击事件改变class类名方法的函数:
var dJShiJian = function(dJs, cLsL) {
if (dJs.className == '') {
addClass(dJs, cLsL);
}else if (dJs.className == cLsL) {
removeClass(dJs, cLsL);
}
}
定义一个onclick点击事件改变img属性值方法的函数:
var hTShiJian = function(gHs) {
if(gHs.getAttribute("src") == "../img/tp7.gif") {
gHs.setAttribute("src", "../img/bjt1.gif");
}else if (gHs.getAttribute("src") == "../img/bjt1.gif") {
gHs.setAttribute("src", "../img/tp7.gif");
}
}
在你需要这种效果的时候直接调用定义好的函数,:
function zhanKai(hTu) {
dJShiJian(dUl[0], 'lB');
hTShiJian(hTu);
}
这样即使需要这种效果的样子再多,只要调用定义好的函数,把参数下就可以了。
十二 操作节点a()与insertBefore()的用法:
appendChiild()用于在指定元素里面的末尾添加一个节点。
insertBefore()用于在指定元素里面的某个位置添加一个节点,这个方法接受两个参数:要插入的节点和作为参照的节点。插入节点后,被插入的节点会变成参照节点的前一个同胞,同时被方法返回。
十三设置或获取位于对象起始和结束标签内的 HTMLinnerHTML
改属性是基本上每个标签对象里面多有的属性,它用于在某标签内添加html代码或文字。并替换当前标签里面的所有子节点,也就是代码。
十四Math对象
Math对象提供了计算机功能。
random()方法返回一个随机数,语法:【Math.random() *可能值的总数 + 第一个可能的值。】
十五parseInt() 方法:
parseInt() 方法返回由字符串转换得到的整数。
十六函数函数的参数 return语句:
1、函数的一个重要特点:命名的参数只提供便利,但不是必须的。就相当于一个临时变量。
2、 return 语句:从当前函数退出,并返回一个值。
function sum (num1, num2) {
xnum1 + num2;
}
十七tagName属性toLowerCase()方法:
1、tagName属性用来获取对象的标签。
2、toLowerCase()方法用来返回一个字符串,该字符串中的字母被转换为小写字母
ie6不支持大写,为了兼容ie6,一般多会转换为小写。