`
alanwu
  • 浏览: 197791 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《javascript权威指南第五版》数据类型和值

阅读更多
黑色字体代表书上的东西(当然是我翻译出来的,可以翻译会有误)
蓝色字体代表我的观点
红色字体代表我的疑问

数据类型和值

三个原生数据类型:numbers,strings of text(strings)和Boolean truth values(booleans).还定义了两个独立的数据类型:null和undefined,他们都只有一个值。

java的null不是数据类型,所以如果程序遇到null基本上就等于束手无措,ruby用nil表示空,是个对象有一些基本操作,scala更进一步有继承Option的None和空列表Nil,可以将空演绎得更充分。

JavaScript支持组合的数据类型---object,一个ojbect表示值的集合,array也是一种特殊的object.

JavaScript还定义了特殊的object---function.function是可执行的object.

对于java或者C++来说function是一种对象或许非常奇怪,但在函数式编程function是理所当然的,function也是一等公民,可以独立存在。

JavaScript基本类型有:3.1. Numbers
JavaScript的Number就是浮点一种表示

3.2. String
String是Unicode字母,数字等等的序列,JavaScript用来表示文本。
String可以和Number互转,如:
Number转为String:
var n = 100;
var s = n + " bottles of beer on the wall.";


String转为Number:
var product = "21" * "2"; // product is the number 42.

很神奇,String居然可以自动识别出来转为Number.Java做不到,Scala可以定义隐式转换做到这一点。

3.3. Boolean值
只有两个:TRue和false

为什么是TRue呢?书写错了?

3.4. Functions函数
函数是可执行代码的片段。
可以像java一样定义:
function square(x) { return x*x; }
也可以用函数式的方式定义:
var square = function(x) { return x*x; }

Scala也可以用这种方式定义,可以把Function存在一个变量里。


3.5. Objects对象
对象是有命名值的集合,这些命名的值通常叫做属性或者字段。
假如一个对象image有命名为width和height的属性,可以:

image.width
image.height


上面说了array是一种对象,array访问属性的方式如:aArray[0],对象也可以,

image["width"]
image["height"]


创建一个对象可以用:
var point = new Object( );
point.x = 2.3;
point.y = -1.2;



也可以:
var point = { x:2.3, y:-1.2 };

对象可以嵌套对象

JavaScrip不像java或其他OO语言,JavaScript不是基于类(Class)的语言,所以它本身不支持Class。

3.6. Arrays数组
一个数组是数值的集合,和一个对象一样,只是每个值都自动有个number的名字,叫索引(index).可以通过中括号加索引访问数值。

创建数组:
var a = new Array( );
a[0] = 1.2;
a[1] = "JavaScript";
a[2] = true;
a[3] = { x:1, y:3 };


JavaScript的数组不是同质的,可以往里面放各种各样的东西。

也可以在new的时候就初始化
var a = new Array(1.2, "JavaScript", true, { x:1, y:3 });


同样JavaScript支持
var a = [1.2, "JavaScript", true, { x:1, y:3 }];


可能更多的人喜欢这种方式,比较直观而且少打几个字。
如果有空值可以留着,用都好隔开:
var sparseArray = [1,,,,5];

3.7. null空值
控制是特殊的值,当null用来做boolean的时候转成false,数值时是0,而字符串时是"null".

所以JavaScript没用NullPointException,但如果处理不当同样会出错。


3.8. undefined未定义
当使用定义了却没用赋值的变量,或者一个不存在的对象属性时,undefined就会返回回来。

3.11. Error Object错误对象
ECMAScript v3定义了表示错误的类。每个错误对象有message属性包含错误信息。


3.13. 基本型的包装对象

var s = "These are the times that try people's souls.";
var last_word = s.substring(s.lastIndexOf(" ")+1, s.length);
细心的人会问,既然sting是基本型,那么s为什么有方法呢?

对了,JavaScript提供了包装基本型的对象:Number, String和Boolean

JavaScript在两者之间可以灵活的转换

你也可以用下面的方式创建同样的东西
var s = "hello world";              // A primitive string value
var S = new String("Hello World");  // A String object
你用正常的方式区别不了s和S。

Java的基本型不能自动转换成对象。
Scala不需要这些,因为没用基本型。Scala还预定义了java基本型的隐式转换,可以给java的基本型包装上很多丰富的功能。


3.14. 对象-基本型转换 Object-to-Primitive Conversion
既然基本型可以转换成对象,那么对象也能转换成基本型,答案是valueOf。 JavaScript有自带的valueOf,如果你觉得不够可以自定义。如果只是一般的转换,用toString就够了。

3.15. 传值(By Value)还是传引用(by Reference)?
传值还是传引用是大多数语言所遇到的问题,像C有传指针。
JavaScript的基本规则是,number,boolean,string这几个基本型是传值的,而object是传引用的。

Scala还要传名(by name),还不能够深入理解。
分享到:
评论

相关推荐

    UPS、蓄电池、空开、电缆配置计算方法.pptx

    5G通信行业、网络优化、通信工程建设资料

    node-v7.4.0.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Unity mesh减面工具 Mesh Simplify 1.12

    Unity mesh减面工具 Mesh Simplify 1.12

    基于Springboot+Vue酒店客房入住管理系统-毕业源码案例设计.zip

    网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

    JAVA扫雷游戏程序+源码

    扫雷游戏是一款经典的计算机游戏,它的目标是在一个方格矩阵中找出所有隐藏的地雷。玩家需要通过点击方格来揭示其内容,如果方格中有地雷,则游戏结束;如果没有地雷,则会显示周围8个方格中地雷的数量。玩家需要根据这些信息来判断哪些方格是安全的,并继续点击其他方格。 在JAVA扫雷游戏程序中,我们使用了一个二维数组来表示游戏的方格矩阵。每个方格可以包含以下三种状态之一:未被揭示、有地雷或安全。我们还使用了一些辅助变量来跟踪游戏中的状态,例如已揭示的方格数量和剩余的地雷数量。 当玩家点击一个方格时,程序会检查该方格是否已经被揭示。如果是,则不做任何操作;否则,程序会揭示该方格的内容,并根据其是否包含地雷来更新游戏状态。如果方格中有地雷,则游戏结束;否则,程序会递归地揭示周围的方格,直到遇到已经揭示的方格为止。 为了提高游戏的可玩性,我们可以添加一些额外的功能,例如计时器、难度级别选择和自定义方格大小等。此外,我们还可以使用图形用户界面(GUI)来美化游戏界面,使其更加友好和易于操作。

    python-3.8.19-amd64-full.exe

    仅供个人娱乐使用,不要乱用造成侵权,搬运自git删hub.co除m/ad中ang1345/Pyt文honW部ind分ows

    网络安全网络安全视频教程56讲全在线地址.txt

    【网络安全】网络安全视频教程56讲全在线地址.txt

    299-企业数字化转型方案20220804.pptx

    299-企业数字化转型方案20220804.pptx

    参考资料-人工智能对劳动力市场的影响机制研究.pdf

    参考资料-人工智能对劳动力市场的影响机制研究.pdf

    3D Facial Expressions

    3D Facial Expressions through Analysis-by-Neural-Synthesis

    AI设计工具-美图设计室:一键生成海报宣传画.txt

    AI设计工具-美图设计室:一键生成海报宣传画

    node-v10.12.0-linux-armv6l.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Springboot+Vue的商业辅助决策系统的设计与实现-毕业源码案例设计.zip

    网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

    5MHz 函数发生器使用说明书

    5MHz 函数发生器使用说明书

    大学生就业平台微信小程序+ssm后端毕业源码案例设计.zip

    网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

    通信驻地网施工组织方案.doc

    5G通信、网络优化与通信建设

    管道顶管工程施工技术.doc

    5G通信、网络优化与通信建设

    Unity 穿墙挖洞-CSG

    Unity 穿墙挖洞——CSG

    基于Python的医院挂号系统带vue前后端分离毕业源码案例设计.zip

    网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

    199-实时数据仓库建设体系.pdf

    199-实时数据仓库建设体系.pdf

Global site tag (gtag.js) - Google Analytics