Strong and Loose Typing:
- 强弱比较
// C#
var customer = new Customer(); //var is compiler inferred
//Javascript
var customer = new Customer(); //var is variable declaration
C#:var变量由编译器决定合适的类型,此例为Customer类型
JavaScript:var代表变量的意思,没有类型的强制
- Compiler匹配最接近Type
//C#
var x = 0; // compiler暗示 to be int
bool isInt = x is int; //x是int类型,右边是true
x = new object(); //C#定义过的变量需要保持typ
//Javascript
var x = 0; //creates variable x that holds a number
bool isNumber = typeof x == "number"; //works but limited
x = new object(); // no problem, can redefie the x with new type
- OO里的Strong typing:
//C#
class Dog : Animal, IMoveable {...}
class Car : Vehicle, IMoveable {...}
//Accept any animal (base class has Feed Methord)
void Feed(Animal ani) {ani.Feed();}
//Accept any object that implements interface
void Move(IMoveable object) {object.Move();}
Dog可以放入Feed方法,因为继承自animal
Dog和Car都可以放入Move方法,因为interface
//JavaScript
//Accept any object
//(must implement Feed function)
functionFeed(ani) {ani.Feed();}
//Accept any object
//must implement move methord
function Move(object) {object.Move();}
不论是何种type的object只要其有Feed方法
Dynamic Typing:
即使定义过x对象,也可以随时增加其属性和方法。
Language Basics:
- 整体程序调用流程:
C#需要有一个入口程序,然后一步步的调用下去
Javascript是按照一行行执行下去,像Commond命令行
Language Closures:
在一个scope里x就一直可以用
Language Coalesce:
Javascript的基本元类型:
- Special Type:null & undefined
//javascript
var a = null; //"null"
var b = c; //"undefined"
- Value Type:
//JavaScript
var a = typeof 1; //number
var b = typeof 1.0; //number
var c = typeof true; //true
var d = typeof false; //false
var e = typeof "hello world" //string
注意:type detector, 就象用as,is关键字在C#里
//javascript
var x = 1;
var typeName = typeof x; //"number"
- Number Type:
special value
- Bollean Type:
一般用来控制程序流程的
JavaScript有很好的Coalescing机制,比如测试一个function传入的参数是否为空("")还是有字符(“hello”),从而控制程序流程
- String Type:
注意:string.length return的是长度的bytes而不是实际characters的个数
Javascript的reference type:
- object type:
- Array type(后一个是array object JSON serilazation经常见)
Array的方法
Function type:
JavaScript也有function type,可以直接复制给一个变量或者类的属性值(当我们定义了对象有一个function type属性之后,可以直接使用object.function的形式)