《JavaScript核心概念及实践》-- 读书笔记

前言:

程序设计语言主要分为两种  1、基于存储原理(冯*诺依曼体系)的命令式编程语言,如C/C++、Java、Object Pascal(DELPHI)。
                              2、根据阿隆左*丘琦的lambda演算而产生的函数式编程语言,如Lisp、Scheme。
                              这两种语言互不干涉的时代(javascript出现以前),程序=数据结构+算法 
                             Javascript被称为具有C的语法的Lisp,完美结合了这两个体系(C的语法,Lisp的内核)。

本书分为两部分 1、Javascript语言的核心概念:javascript的对象、函数、数组、闭包
                   2、Javascript支持的编程范式:javascript引擎、javascript在java、C、C++等应用中的使用,服务器端的javascript应用。

第一章 概述

1.1 javascript简史
  Mocha(1996) -- LiveScript -- JavaScript -- ECMAScript
  JSP、ASP可以为页面提供动态内容,但是如果没有javascript则无法在服务器返回之后动态地在前端修改页面,也没有页面特效。

1.2 javascript语言特性
    动态的、弱类型、基于原型的脚本语言。
    彻底的“一切皆对象” :即使作为代码本身载体的函数(function)也是对象,数据与代码的界限相当模糊。

1.2.1 动态性:

  1.为一个属性赋值,不必事先创建一个字段,只要在使用时直接赋值

1 var obj = new object();//定义一个对象
2 obj.name= "an object";//动态创建属性name
3 obj.sayHi = function(){return "Hi";};//动态创建属性sayHi
4
5 delete obj.name;//删除对象的属性

  在静态语言中,需要预先定义好对象的属性以及属性自身的类型。定义完成后,对象的结构就定下来了,之后都保持这种结构无法更改。通常对象会继承一些自己用不到的方法,并且无法删除。

  2.动态地访问一个javascript对象的属性

1 var key = "property";
2 print(key);
3
4  var obj = {property:"myproperty"}
5 print(obj[key]);

  这个特性可以使得代码更加简洁清晰,比如可以动态地从代码中生成对象的属性名,然后去除属性值等。

1.2.2 弱类型:数据类型无需在声明时指定,解释器会根据上下文对变量进行实例化。
              在javascript中,类型是和值关联的,而不是和变量关联。弱类型具有很大的灵活性,在定义变量时无需显示声明。
              弱类型也有其不利的一面,例如开发面向对象javascript时,没有类型的判断,但是可以通过其他途径解决。

1.2.3 面向对象:在javascript中一切都是对象,甚至用以表发逻辑的函数/代码本身也是对象,比如代码本身可以作为参数传递给其他代码

1  var array = [1,2,3,4,5];
2  array.map(function(item){return item*2});
3
4  var staff = [{name:‘lilei‘,age:25},{name:‘hanmeimei‘,age:24},{name:‘hobo‘,age:25}];
5  staff.map(function(item){return item.name.toUpperCase});
6  staff.filter(function(){returen item.age>24});

1.2.4 解释与编译:浏览器中,javascript是解释型语言
                  Rhino(java版的javascript解释器)中,javascript编译型(可以被编译为java字节码) 
                  Google V8引擎中,直接将javascript代码编译为本地代码,无需解释。

解释型 优:可以随时修改代码,无需编译,刷新页面即可重新解释
             劣:由于每一次都需要解释,程序开销大。
      编译型 优:仅需要编译一次,每次都运行编译过的代码即可
             劣:丧失动态性

1.3 javascript应用范围 

  现在的javascript大多数运行于客户端。
  部分运行于服务器端,如servlet、asp等
  作为独立语言运行于其他应用程序中,如Rhino(java),SpiderMonkey(C)

1.3.1 客户端javascript
    随着Ajax的复兴,客户端的javascript得到了很大的发展,出现大量javascript库,如JQuery、ExtJS、Backbone.js、Mootools等。

1.3.2 服务器端javascript
        Node.js,Helma,Apache Sling等。
 
        Jaxer的例子:

 1 <script>
 2 jQuery(function(){
 3 $("form").submit(function(){
 4 save($("textarea").val());
 5 return false;
 6 });
 7 });
 8 </script>
 9 <script runat="server">
10 function save(text)
11 {
12 Jaxer.File.write("temp.txt",text);
13 }
14 save.proxy = true;
15
16 function load()
17 {
18 $("textarea").val(
19 Jaxer.File.exists("tmp.txt") ? Jaxer.File.read("tmp.txt") : ""
20 );
21 }
22 </script>
23 <script>
24 var rs = Jaxer.DB.execute("SELECT * FROM table");
25 var field = rs.rows[0].field;
26 </script>

node.js的例子:node.js运行实现了javascript的模块规范ComminJS,使得大规模javascript开发成为可能,一个模块可以使用其他任何模块,或者将自己需要公开的函数导出,提供给别的模块使用。

<script>
var sys = require(‘sys‘);
http = require(‘http‘);

http.createServer(function(){
setTimeout(function(){
res.sendHeader(200,{‘Content-Type‘:‘text/plain‘});
res.sendBody(‘Hello World‘);
res.finish();
},2000)
}
).listen(8000);

sys.puts(‘Server running at http://127.0.0.1:8000/‘);
</script>
<script>
var tcp = require(‘tcp‘);
var server = tcp.createServer(function(socket){
socket.setEncoding("utf8");
socket.addListener("connect",function(){
socket.send("hello\r\n");
});
socket.addListener("receive",function(data){
socket.send(data);
});
socket.addListener("eof",function(){
socket.send("goodbye\r\n");
socket.close();
});
});
</script> 

第二章 基本概念

2.1 数据类型
  javascript中数据类型分为 1、基本数据类型:在必要时会隐式转换为对象
                                                 2、对象类型:对象、数组、函数

2.1.1 数据类型:string、number、boolean、undefined、null、object(6种)

2.1.2 对象类型:这里提到的对象不是对象本身,而是指一种类型。 
                包括对象(属性的集合,即键值的散列表)、数组(有序的列表)、函数(包含可执行的代码)。
                对象类型是一种复合的数据类型,其基本元素由基本数据类型组成,但不嫌友基本类型,比如对象类型中的值可以使其他的对象类型实例。

2.1.3 基本类型与对象间的转换 
    
    基本类型转换为对象:
          基本数据类型在做一些运算时,会临时包装一个对象,做完运算后,又自动释放该对象。

    对象转换为基本类型:
            通过调用对象的valueOf()方法来取得对象的值,如果和上下文的类型匹配,则使用该值。如果valueOf()取不到值的话,则需要调用对象的toString()方法,而如果上下文为数值型,则又需要将此字符串转换为数值。valueOf()的优先级要高于toString()。
            事实上这种转换规则会导致很多问题,比如所有非空对象在布尔值环境下都会被转换为true
            if(datamodel.item){...}else{...}
            datamodel.item在转换为布尔值的同时判断是否为空,简化了if(datamodel.item != null)的写法

2.1.4 类型的判断

    例子:当函数的参数为函数时需要判断这个参数的类型,使用typeof操作符和instanceof操作符结合判断

 1 function handleMessage(message,handle)
 2 {
 3     return handle(message);
 4 }
 5
 6 //在调用前判断handle是否是function
 7 function handleMessage(message,handle)
 8 {
 9     if(typeof handle == "function")
10     {return handle(message);}
11     else
12     {throw new Error("the 2nd argument should be a function");}
13 }

  当typeof相同时:

1 var obj = {};
2 var array = ["one","two","three"];
3
4 print(typeof obj);//object
5 print(typeof array);//object
6
7 print(obj instanceof Array);//false
8 print(array instanceof Array);//true

2.2 变量

    变量是对值的存储空间的引用,通过一个名字将一个值关联起来,以后通过变量就可以引用到该值。

2.2.1 基本类型和引用类型

    基本类型在内存中有固定的大小。

    引用类型原则上无大小限制,我们通过对其访问

  

时间: 2024-10-10 01:19:19

《JavaScript核心概念及实践》-- 读书笔记的相关文章

码农的产品思维培养第一节(人人都是产品经理读书笔记)

在前段时间,密集的推出Android学习记录之后,我觉得接下来的Android开发进入了一个精进演变的过程,革命性的东西略缺.每日更新特别新的东西也违背认知规律.所以以后关于Android方面的知识,碰到什么,然后记录什么. 而今天,在前一篇日志里面,我描述了我为什么要去理解"产品经理",从这一节开始,我要实施我的计划.所以,和Android记录一样,我要记录这个过程.对自己是一个回归总结吸收的过程,同时也希望能够帮助到更多的朋友,如果你也心存学习进取之心,如果你也如我一般疑惑未解心不

人人都是产品经理读书笔记(四)

补充:

《启示录:打造用户喜爱的产品》—— 读书笔记

这是一本非常不错的书,即使你可能只是一名开发工程师,也会有意想不到的收获! 如果你是一名产品经理,那就更不能错过了!不要留下遗憾! 这真的是一本很好的书,读每一遍都会有不同的收获,绝对让你震撼!我是会再读一遍或者N多遍的, 而能把这些内容转应用到实际中的人才是真正的高手,细细体会,在工作中好像已经有人在用了!惊讶!得抓紧时间了! 通过这本书,你将会知道一个合格的产品经理应该做什么,怎么做 本书主要讲解三个方面:人员.流程.产品 人员:产品从开始到完成过程中所有的参与者 流程:产品在开发过程中的所

产品经理学习笔记(二)------产品经理的工作职责(下)

二.产品经理的工作职责(下) 4.产品宣讲 ---宣讲对象:客服.市场.销售.运营.其他(开发进度到50%) ---宣讲目的:内部培训.获得认可 ---宣讲方式:内部推荐会(预测.演示.试用).注意控制(氛围.引导) ---宣讲目标:获得认可.帮助其他团队更好理解产品.协助其他团队更好开展工作 5.市场推广 ---对产品资料进行内容把关:网站.移动应用.印刷品等 ---主要针对:市场.公关.运营.销售 6.产品推出后的管理与迭代 ---运营数据的整理分析 ---深入一线体验产品 ---关注用户需

产品经理--读书静心的日子

入行教育,做教育产品工作,需要不断的进步. 一.了解产品开发.项目管理经验. 二.教育基础理论及相关知识. 小学阶段 (2016.2017不断的翻阅,有新的体会) 中学阶段(2018主攻方向)

谷歌和亚马逊如何做产品(读书笔记)

《产品经理》读书笔记

自从鼠标手犯病后,就刻意减少使用电脑的时间并且加强运动,目前已经完全康复,但是还是需要注意.因此更新博客的频率大大降低,但是也有时间多看看书,学习学习了! 最近看了<yes,产品经理>上下册,作者 汤圆 老马,文笔诙谐,把管理知识融入工作日常内容,浅显易懂,对于非管理专业的门外汉,还是不错的读物! 下面是摘抄的部分主要内容,个人认为比较有用的就记录下来. ------------------------------------------------ 制定产品价格策略的6步: 确定企业目标 冲

产品经理的那些事第一章读书笔记

1.一个产品经理的信仰:好产品能改变世界. 2.为什么要做产品经理:因为热爱,改变世界的方法有很多,技术可以改变世界,好的产品也可以,当然还有其他,但我热爱产品,一件事只有热爱了,才能持续不断的去做好,所以我选择了产品经理这条路. 3.产品是什么:产品是用来解决某个问题的东西. 4.产品经理为何而设:想要更了解产品与它面临的竞争情况,最终目的是要满足顾客的需求. 5.产品经理概念的进化: 分析: 1)行业形态不同:成熟行业vs.新兴行业 ①传统行业 概况:经过几十年乃至上百年的摸爬滚打,市场已经

【读书笔记】产品经理要做的事

文章链接:http://www.chanpin100.com/archives/44223 作为一个产品经理,不能只画图:产品经理更像是一个纽带,连接着各个环节,保持项目的正常运行. 在开始要做一个产品的时候,不能上来就画图,也不能告诉你需求就开始画图.应该先对需求进行筛选和挖掘:把伪需求去掉,挖掘出潜在需求. 1.分析产品的步骤:目标人群.使用场景.业务核心. 2.在团队中担任掌舵人,有目的的引导团队:激发团队灵感可以使用商业画布:客户分布.价值主张.渠道通路.客户关系.收入来源.核心资源.关

【读书笔记】神一样的产品经理(一)

 第一篇 产品经理 1.产品经理诞生的背景和价值 *很多入门级书里都会提到这一部分,本书讲了保洁诞生的第一个产品经理的故事. 2.很牛的产品经理(例子是乔布斯.郭靖) 1)几个重要特性:*影响力 *核心需求把控力 *创新力 *痴情力 2)产品经理的职责: *明确产品的目标用户群及其特征*获取.评估和管理用户需求*完成产品需求文档.产品原型和流程图*精通用户体验.交互设计和信息架构技能*项目管理.需求变更管理和需求验收*产品运营数据的分析和总结*提供运营.市场和销售等支撑 3)产品经理常犯的错误