js学习笔记01

By | 2019年9月2日

课堂学习笔记,写的非常随性。可能由于个人水平问题内容存在谬误,欢迎各路同好交流指正

关于基本类型、对象类型的存储问题

var a =127.1   // 声明了一个变量(这个实际上也是申请了一段内存)
var a, b = 1;  // 对于基本类型,只对值进行比较。
// (a===b) == true

当声明对象时,申请的对象所占的内存中存储其成员的地址,而对象中的成员则存储在另外的地方。

对象声明格式例:

var b = {
    name: "",
    age: "";
    run: function() {
        ...
    }
}

对于对象类型,js会加一个“对象包装器”,相当于产生了一个「包含这个值的对象」。

var a = new Number(127);    // 对象类型
var b = new Number(127);    // 对象类型
// (a===b) == false
// 因为a、b存的各是一块内存地址,值相同,但这里比较的是变量的地址。

关于将对象作为参数传递的示例:

function f(a) {
    a.name="abc";
}
var x = {
    name: "ddd",
    age: 18,
    'middle-school': "nb"   // 标识符中不能加-,想要加上需要加引号
}
f(x);
/** 这种情况下,x.name=="abc"。因为即使是拷贝的对象,
*   对象中的成员也是地址,地址再拷贝值也不会变。当函数
×   执行完,a的生命周期就结束了就被干掉了。
*/

补充:关于类和 prototype

prototype 是用于解决 js 没有类的概念的解决方案。

进行对象实例化时直接拷贝 prototype 进行生成。

其他一些补充:

js 由解释器在运行到相应代码时动态地确定变量类型。当不指定类型时为 undefined 类型。

当程序起始写上‘use strict’会使用严格模式,对变量的定义等进行严格的检查。

模板用法

var name = 'abc';
var age = 20;
var msg = 'hello ${name}, are you ${age}'
// 这个叫做“模板用法”,也是一种引用,等效与直接拼接字符串。

数组

js中的 Array 也是对象类型,是「多个类型的集合」,两个成员完全相同的array,其本身的值是不同的(因为本身存的是内存)

var a = [1, 2, 3]
var b = a.slice();
// 则 (a==b)==false
// 因为进行比较的值是对象的地址。

数组还可以直接当栈来用

也有unshift、shift这种整体左移右移操作。

回调函数

js还可以将对象直接作为参数,在函数调用的参数表中进行定义,传进函数进行使用。

var b = {
    name: "abcde",
    age: "";
    run: function() {   // 这个函数叫做「匿名函数」,因为定义完了直接赋值给run这个属性
        console.log('myNameIs:'+ this.name);
    }
}

var o = Object.create(b);// 这个就是js在没有类的情况下,使用对象+克隆实现类的效果

可以把一些操作(即,函数)作为参数,扮演一个「工作环节」传入一个更大的函数。

function abc(root, f){
    // ... 对 root 相关的一堆操作
    f(root);
}

function log(a) {
    // ...
};

abc(root, printf);
abc(root, log)

js 中数组的遍历

var a=['A', 'B', 'C'];
a.forEach(function (element, index, array) {    // forEach的函数是另外一个匿名函数,
                                                // 这个函数需要这么三个参数,
                                                // 给 forEach 的内部实现使用。
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向
    ...// 具体业务逻辑 
})   
// forEach内部实现:遍历时每拿到一个元素就作为参数传递给回调函数。具体操作在回调函数内实现。
// 实际上,forEach 做的工作,就是把其所在对象的三个属性作为参数,去调用回调函数

js中可以使用定时器

function callback() {
    console.log('Done');
}

console.log('begin');
setTimeout(callback, 1000); // 1000ms后,调用 callback
console.log('over');

//console: begin--1s--Done--over

异步请求:

var email = "a@live.com"
console.log(1);
jQuery.ajax({           // 以异步方式做请求,参数是一个临时对象,其中包含一个回调函数。
    url:...
    ...
    success: function(data) {   // 回调函数,调用它的是解释器,data是服务器获得的数据。
        console.log(2);
    }
});
console.log(3);

// console: 1, 3, 2

点击量:619

发表评论

邮箱地址不会被公开。 必填项已用*标注