重新认识javascript(二)


概述:

JavaScript 是一个面向对象的动态语言;它有类型和运算符,内置对象和方法。它的语法来源于 Java C 语言,也有许多来源于其他语言的结构被应用在 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 语句里面(见下面例子)。因为这个原因,我们有时就简单的说真值和假值,表示值被转换成布尔类型的值时分别会变转换为 true false 。或者,这些值会被分别叫做 truthy falsy 。(它们分别是 true false 的字面量)

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

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

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

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

var name =otherName || "default";

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

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值