浏览 1246 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-02
最后修改:2009-11-02
蓝色字体代表我的观点 红色字体代表我的疑问 数据类型和值 三个原生数据类型: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),还不能够深入理解。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |