javascript内核高级编程_学习笔记

语言特性

1、动态性

       动态性是指,在一个javascript对象中,要为一个属性赋值,我们不必事先创建这个属性,只需要在使用的时候做赋值操作即可。

      var  obj=new Object();

      obj.name="demo";

      obj.sayHi=function(){alert("Hi");}

2、弱类型

      与java、.net等不同,javascript是弱类型的。它的数据类型无需在声明变量时指定,解释器会根据上下文对变量进行实例化。

       var s="test";

       s=new Object();

       s.name="object";

       弱类型语言的变量可以重复利用,比如赋值为字符串类型后,可以赋值为其他类型。比如Number类型、对象等。

3、解释和编译

       javascript是一门解释性的语言,特别是作为浏览器中的javascript,所有主流浏览器都将javascript作为一门解释性语言。然后这并非定则,如在java版的javascript解释   器 rhino中,脚本是被编译为字节码的。

       解释型语言随时可以被修改,无需编译,浏览器刷新后重新解释,可以实时看到程序的结果,但每一次都解释,产生的开销较大。编译型语言只需要编译一次,每次运行编译过的代码即可,但丧失了动态性。

  • 数据类型

1、基本数据类型

 在javascript中,包含三种基本的数据类型,字符串(String)、数值(Number)、布尔值(Boolean)。

2、对象类型

 对象(属性的集合,即键值的散列表)、数组(有序的列表)、函数(包含可执行的代码)

3、两者之间的转换

 自动装箱:基本数据类型在做一些基本运算时,会临时包装成一个对象,做完运算后,又自动释放该对象。

 var str="hello world!";

 alert(str.length)

当使用str.length时,javascript会自动包装成一个临时的String对象,内容为str的内容,然后获取该对象的length对象,最后,这个临时的对象将被释放。

拆箱:将对象转换为基本的数据类型的方式,通过调用对象的valueOf()和toString()方法。valueOf()的作用是将一个对象的值转换成一种合乎上下文需求的基本类型,toString()的作用是专为对象对应的字符串,当然前提是该对象重载了Object的toString()方法。

所以非空对象,在布尔值环境下,都会被转化为true。如下:

if (new Boolean(false) && new Object() && new String("") && new Array()) {
      alert("convert to boolean");
}

  •  运算符

[]运算符

[]运算符可用在数组对象和对象上,从数组中按下标取值。在访问对象的时不知道属性的时候可以通过for遍历对象,取出每个属性对应的值。

.运算符

.运算符的左边为一个对象(属性的集合),右边是属性名,应该注意的是右边的值除了作为左边的对象的属性外,同时还可能是它自己的右边的值的对象。

==和===以及!=和!==

运算符==读作相等。相等操作符会对两边的操作数做类型转换。

运算符===读作等同。等同操作符不会对两边的操作数做类型转换。

eg:

alert(1==true)
alert(1===true);
alert(""==false);
alert(""===false);
alert(null==undefined);
alert(null===undefined);

相等和等同运算符的规则分别如下:

相等运算符

如果操作数具有相同的类型,则判断其等同性,如果两个操作数的值相等,则返回true,否则返回false。

如果操作数的类型不同,规则如下:

null和undefined相等

其中一个数字,另一个字符串,则将字符串转换为数字,在做比较

其中一个true,先转换成1(false转成0)在做比较

其中一个是对象,另一个是数字/字符串,则将对象转换为原始值(通过toString()或者valueOf()方法)

其他情况,则直接返回false

 

等同运算符

如果操作数类型不同,则不进行值的判断,直接返回false

如果操作数的类型相同,规则如下

都是数字,如果值相同,则两者等同(有一个例外,就是NaN、NaN与其本身也不相等)。否则不等同

都是字符串,串值相同,则等同,否则不等同

都是布尔值,且值均为true/false,则等同,否则不等同

两个操作数引用同一个对象(数组、函数),则等同,否则不等同

两个操作数均为null/undefined,则等同,否则不等同

 

在javascript中,推荐使用等同/不等同来进行判断。这样可以避免一些难以调式的bug

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值