重新认识javascript(二)

翻译 2013年12月01日 20:47:16


概述:

JavaScript是一个面向对象的动态语言;它有类型和运算符,内置对象和方法。它的语法来源于JavaC语言,也有许多来源于其他语言的结构被应用在JavaScript中。(和其他语言的相比)一个关键性差异是JavaScript中没有类;然而类的功能可以由类原型来完成。另一个主要差异是方法就是对象,使得它具有执行代码和像其他任何对象一样被传递的能力。

现在,我们开始学习所有语言中都有的内容:类型。JavaScript程序操作值,并且这些值都是属于一个类型的。JavaScript的类型包括:

Numbers

Strings

Boolean

Functions

Objects

oh,还有UndefinedNull,这两个有点特殊。还有数组,它是一种特殊类型的对象。还有日期和正则表达式,这两个对象是可以直接使用的。还有严格意义上说,函数也是一种特殊类型的对象,所以类型表应该是下面这样的:

Number

String

Boolean

Object

       Function

       Array

       Date

       RegExt

Null

Undefined

JavaScript也有一些内置的Error类型,尽管如此,如果我们坚持第一个列表,事情会简单许多。

Numbers

根据IEEE754规范,JavaScript中的Numbers是双精度64位的值。这会产生一些有趣的结果。JavaScript中没有Integer类型,如果之前你使用C或者Java,那么在运算的时候你需要小心一些。注意下面这个场景:

0.1 + 0.2 == 0.30000000000000004

实际上,Integer值是32位的整数(在某些浏览器中是这种方式存储的),这对位运算非常重要。想了解更多可以查看The CompleteJavaScript Number Reference

JavaScript支持数字运算的标准,如加减乘除(或者模运算)等等。这里也涉及到一个之前忘记提到的内置对象,叫做Math,它可以处理许多高级数学函数和常量。

Math.sin(3.5);
var d = Math.PI * r * r;

你可以用内置方法parseInt将一个字符串转换为一个整数,它接受一个基数作为第二个可选的参数来完成转换,通常你都需要提供这个参数(这个基数就是通常说的进制数)。

> parseInt("123", 10)
123
> parseInt("010", 10)
10

如果你不提供这个基数,那么在一些较老的浏览器中你会得到意想不到的结果

> parseInt("010")
8

这种情况的发生,是因为这个字符串以0开头,parseInt方法把这个字符串当做是八进制数处理

如果你想把一个二进制数转换成一个整数,只需要修改基数:
> parseInt("11", 2)
3

类似的,你可以用内置方法parseFloat去解析浮点数,它始终用10来作为基数,这一点和它的“堂兄弟”parseInt不同。

你也可以使用一元运算符+将值转为数字

> + "42"
42

如果这个字符串是一个非数字的值,那么将会返回一个特殊值NANNot a Number的简写)

> parseInt("hello", 10)
NaN

NAN是有毒的:如果你把它当做一个输入值做任何数学运算,结果也将会是NAN

> NaN + 5
NaN

你可以用内置函数isNAN来测试一个值是否是NAN

> isNaN(NaN)
true

JavaScript也有特殊字Infinity-Infinity(正无穷大和负无穷大)

> 1 / 0
Infinity
> -1 / 0
-Infinity

可以用内置函数isFinite来判断一个值是不是Infinity-Infinity或者NAN

> isFinite(1/0)
false
> isFinite(-Infinity)
false
> isFinite(NaN)
false

注意:parseIntparseFloat方法解析一个字符串直到碰到的不是一个合法数字格式的字符,然后返回解析到那个位置的数字。然而当使用“+”运算符时如果碰到一个不合法的字符,它只是简单将这个字符串转换成NAN


Strings

JavaScript中的Strings是一些字符组成的序列,准确点说,他们是Unicode编码的字符组成的序列,每一个字符是由一个16位的数字表示。这对于那些不得不处理国际化的问题的人来说无疑是很受欢迎的。

如果你想表示一个单独的字符,只需要使用一个长度为1的字符串就可以了。

使用字符串的length属性,可以得到这个字符串的长度

这是我们学习JavaScript对象的第一把刷子!还记得我提到的strings就是对象吗?它们也有方法

> "hello".charAt(0)
h
> "hello, world".replace("hello", "goodbye")
goodbye, world
> "hello".toUpperCase()
HELLO

其他类型:

JavaScriptnullundefined的区别。null是一个object类型的对象,表示是一个特指的空值,而undefined,是一个undefined类型的对象,表示没有初始化的值,也就是说,还没有分配一个值(给变量)。后续我们会讨论变量,但是在JavaScript中是允许声明一个变量却不给它分配一个值的。如果你这么做了,那么这个变量的类型就是undefined

JavaScript有一个布尔类型,它的取值范围是truefalse(它们两个都是关键字)。任何值依据下面的规则转换成一个布尔型的值。

1.False0,空串(””),NANnullundefined都将转换为false

2.其他的都转换为true

你可以使用Boolean方法来显示的完成这个转换:

> Boolean("")
false
> Boolean(234)
true
然而,很少有必要这么做,因为当需要一个布尔值的时候,JavaScript默认会执行这个转换,就像在if语句里面(见下面例子)。因为这个原因,我们有时就简单的说真值和假值,表示值被转换成布尔类型的值时分别会变转换为truefalse。或者,这些值会被分别叫做truthyfalsy。(它们分别是truefalse的字面量)

Boolean值支持Boolean运算,像&&(逻辑与)||(逻辑或)和!(逻辑非),看下面例子:

&&和||运算符会使逻辑短路,意味着会根据第一个操作数的结果来决定是否执行第二个操作数。这对在使用一个对象的属性之前检测对象是否是null非常有效。

var name = o && o.getName();

Or运算符可用来设置默认值:

var name =otherName || "default";

JavaScript有个三目运算符,用来计算条件表达式:

var allowed = (age > 18) ? "yes" : "no";


重新认识JavaScript

  • 2009年07月20日 10:44
  • 223KB
  • 下载

重新认识javascript的settimeout和异步

今晚看到QLeelulu的一道JavaScript面试题(setTimeout),稍微想了一下,好不容易连猜带蒙,凑巧说对了答案。但是原因到底是什么呢?自己一时也说不太清楚,反正感觉就是一个死循环造成...

重新认识JAVASCRIPT

内容来源于从网上看到的一些文章。 主要介绍一些 javascript 比较混乱的语法和一些不太常用的用法。 基本语法 Js 是弱类型动态语言,所以任意变量名都可随时改变数据类型,在js 里面一切...
  • xwdev
  • xwdev
  • 2011年08月24日 17:46
  • 317

重新认识JavaScript

JavaScrpit在我眼中一直是web前端脚本语言,而这段时间的一些工作,让我对JavaScript有了一个全新的认识。   公司准备启动的一个手游项目,服务器端准备使用网易的开源框架pomelo。...

重新认识javascript的settimeout和异步

转载: http://www.cnblogs.com/jeffwongishandsome/archive/2011/06/13/2080145.html 今晚看到QLeelu...
  • wmqdn
  • wmqdn
  • 2012年05月11日 19:36
  • 253

重新认识javascript(四)

对象 JavaScript对象只是简单的名值对(键值对)的集合。正因如此,它们和下面的是类似的: Python中的字典 Perl和ruby中的Hashes C和c++中的hashtables Jav...

重新认识流程管理、流程优化

  • 2010年06月25日 09:14
  • 1.49MB
  • 下载

重新认识Jquery中的html()方法

  • 2014年09月09日 21:31
  • 67KB
  • 下载

重新认识java(二) ---- 面向对象之封装!

如果你认为封装仅仅是private + getter and setter,那你就大错特错了!

重新认识NTFS文件系统

  • 2014年03月21日 01:00
  • 38KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重新认识javascript(二)
举报原因:
原因补充:

(最多只允许输入30个字)