javascript入门-廖雪峰教程学习笔记

 

1.alert("aaa"),alert是弹出警告框

2.通常把js代码放到html的<head>中,或者把JavaScript代码放到一个单独的.js文件,然后在HTML中通过<script src="..."></script>引入这个文件

3.使用var来进行声明变量,例如

var x = 1;

4.JavaScript不区分整数和浮点数,统一用Number表示

5.字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果

6.javascrpit是动态类型

7.Map是一组键值对的结构,具有极快的查找速度。

举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array

var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,Array越长,耗时越长。

如果用Map实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用JavaScript写一个Map如下:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

8.JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部。但是 不会提升变量y的赋值。

9.JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性。

10.名字空间

全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。

减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中。例如:

// 唯一的全局变量MYAPP:
var MYAPP = {};

// 其他变量:
MYAPP.name = 'myapp';
MYAPP.version = 1.0;

// 其他函数:
MYAPP.foo = function () {
    return 'foo';
};

把自己的代码全部放入唯一的名字空间MYAPP中,会大大减少全局变量冲突的可能。

11.JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量,为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量,例如:

'use strict';

function foo() {
    var sum = 0;
    for (let i=0; i<100; i++) {
        sum += i;
    }
    // SyntaxError:
    i += 1;
}

12.const来定义常量,constlet都具有块级作用域

13. this的问题

JavaScript的函数内部如果调用了this,那么这个this到底指向谁?

答案是,视情况而定!

如果以对象的方法形式调用,比如xiaoming.age(),该函数的this指向被调用的对象,也就是xiaoming,这是符合我们预期的。

如果单独调用函数,比如getAge(),此时,该函数的this指向全局对象,也就是window

14.filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。

例如,在一个Array中,删掉偶数,只保留奇数,可以这么写:

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
    return x % 2 !== 0;
});
r; // [1, 5, 9, 15]

15. Arraysort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。如果不知道sort()方法的默认排序规则,直接对数字排序,绝对栽进坑里!

16.JavaScript的Date对象月份值从0开始,牢记0=1月,1=2月,2=3月,……,11=12月。

17.正则表达式

在正则表达式中,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,\w可以匹配一个字母或数字,.可以匹配任意字符,\s可以匹配一个空格

18.js创建对象例子:

function Student(props) {
    this.name = props.name || '匿名'; // 默认值为'匿名'
    this.grade = props.grade || 1; // 默认值为1
}

Student.prototype.hello = function () {
    alert('Hello, ' + this.name + '!');
};

function createStudent(props) {
    return new Student(props || {})
}

19.

JavaScript的原型继承实现方式就是:

  1. 定义新的构造函数,并在内部用call()调用希望“继承”的构造函数,并绑定this

  2. 借助中间函数F实现原型链继承,最好通过封装的inherits函数完成;

  3. 继续在新的构造函数的原型上定义新方法;

20.npm是Node.js的包管理工具(package manager)。 

21.使用module.exports = xxx和require可以进行模块间的相互调用

22.一个Readable流和一个Writable流串起来后,所有的数据自动从Readable流进入Writable流,这种操作叫pipe

23.nodejs创建的第一个http服务器,代码如下:

var http=require('http');
var server=http.createServer(function(request,response){
console.log(request.method+" : "+request.url);
response.writeHead(200,{'Content-Type':'text/html'});
response.end('<h1>Hello xiaokeai!</h1>');
});
server.listen(8080);
console.log('Server is running at http://127.0.0.1:8080/');

输出结果如下:

PS D:\360MoveData\Users\Administrator\Desktop\learnnodejs> node hello
Server is running at http://127.0.0.1:8080/
GET : /
GET : /
GET : /favicon.ico

分析:

代码中的第一个输出语句:

console.log(request.method+" : "+request.url);

request.method输出的是request的访问方法,是GET或者是POST

request.url显示的是访问路径

通过输出语句

GET : /

可以看出,访问方式是GET,而要访问的路径'/'正是代表主页

还有一句输出

GET : /favicon.ico

每次访问网页之时浏览器都会发出两次请求,一次正常请求,一次图标请求,favicon.ico对图标请求做专门的处理

之后的

response.writeHead(200,{'Content-Type':'text/html'});

Content-Type指示响应的内容,这里是text/html表示HTML网页。请注意,浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。

再之后:

response.end('<h1>Hello xiaokeai!</h1>');

结束响应,告诉客户端所有消息已经发送。当所有要返回的内容发送完毕时,该函数必须被调用一次。

如果不调用该函数,客户端将永远处于等待状态。

server.listen(8080);

表明服务器一直在监听8080端口,这时候通过在浏览器地址栏输入localhost:8080即可访问到刚刚创建的服务器,截图如下:

至此,完成了一个最简单的http服务器的创建 

http客户端:

24.nodejs的事件回调

看到两篇博客,讲的都很好,可以相互配合看一下,我就不再多说

http://www.ruanyifeng.com/blog/2014/10/event-loop.html

https://www.cnblogs.com/moxiaowohuwei/p/8438236.html

25.npm start

npm start启动。npm start命令会让npm执行定义在package.json文件中的start对应命令:

"scripts": {
    "start": "node app.js"
}

26. json

JSON 是用于存储和传输数据的格式。

JSON 通常用于服务端向网页传递数据 。

27.nodejs的tcp协议

创建一个简单的tcp服务器

var net = require('net');
var server = net.createServer(function (socket) {
 // ႎ的૶接
 socket.on('data', function (data) {
 socket.write("你好"
 });
 socket.on('end', function () {
 console.log('连接断开');
 });
 socket.write("欢迎光临nodejs");
});
server.listen(8124, function () {
 console.log('server bound');
}); 

 客户端:

var net = require('net');
var client = net.connect({port: 8124}, function () { //'connect' listener
 console.log('client connected');
 client.write('world!\r\n');
});
client.on('data', function (data) {
 console.log(data.toString());
 client.end();
});
client.on('end', function () {
 console.log('client disconnected');
}); 

TCP服务事件(图片来源于<<深入浅出Node.js>>):

 

项目时间有限,先学一些急需用到的,其他部分等将来需要时再去补

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值