JavaScript权威指南(第六版)-第3章 类型、值、变量

在编程语言中能表示在操作的值得类型称作数据类型(type)

JavaScript数据类型分为两类:原始类型(数字,字符串,布尔值)和对象类型

JavaScript中有两个特殊的原始值:null(空),undefined(未定义),他们分别代表各自特殊类型的唯一的成员

JavaScript的数据类型:数字,字符串,布尔值,null,undefined,对象

对象是属性的集合,每个属性都由“名/值对”构成,值可以是原始值如数字,字符串,对象(其中有个比较特殊就是全局变量global object)。

普通js对象是“命名值”的无序集合,js定义一种特殊对象——数组和函数

函数用来初始化(new)一个新建的对象——是构造函数。每个构造定义一类(class)对象——由构造初始化的对象组成的集合。

类可以看做是对象类型的子类型。除了数组类和函数类之外,js语言核心定义其他三种有用的类

JavaScript是一种面向对象的语言,我们可以不用全局的定义函数去操作不同类型的值,数据类型本身可以定义方法来使用值。

JavaScript的分类还可以分为可变类型(可修改:对象和数组)和不可变类型(不可修改:数字,布尔值,null,undefined)

JavaScript变量是无类型的,使用var声明变量

一.数字

1.js不区分整数值和浮点数值

2.整型直接量

十六进制:0xff——15*16+15=255(十进制)

最好不要使用以0为前缀(基数为8)形式表示整型直接量

3.浮点型直接量

可以含有小数点。一个实数由整数部分,小数点,小数部分组成

3.14

2345.789

.3333

6.02e23//6.02*10^23

1.4738E-32//1.4738*10^(-32)

4.JavaScript中的算术运算

Math对象的方法

方法 描述
abs(x) 返回数的绝对值。
acos(x) 返回数的反余弦值。
asin(x) 返回数的反正弦值。
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x) 对数进行上舍入。
cos(x) 返回数的余弦。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
toSource() 返回该对象的源代码。
valueOf() 返回 Math 对象的原始值。

5.JavaScript中的算数运算在溢出(overflow),下溢(underflow或被零整除时不会报错)

6.被0整除不报错:只是简单的返回无穷大(infinity)或负无穷大(-infinity)。有个例外:0/0没有意义,用NaN表示

无穷大除以无穷大、给任意负数作开方运算或算术运算与不是数字或无法转换为数字的操作数一起使用时都将返回NaN

7.js中的非数字值不与任何值相等 包括自身。负零=正零值

二.文本

1.字符串是一组由16位值组成的不可变得有序序列,每个字符通常来自于Unicode字符集。js通过字符串类型来表示文本。字符串的长度length是其所含16位值的个数。

2.ECMAScript字符串直接量可以拆分成数行,每行必须以反斜线\结束,反斜线和行结束符都不算是字符串直接量的内容。若想在字符串直接量中另起一行,可以使用转义字符串\n

3.转义字符(又称 字符实体)

https://www.cnblogs.com/lojun/p/6725310.html对转义字符 单引号&双引号的使用

\'  \"

单引号   双引号

\o

NULL字符

\&

和号

\\

反斜杠

\n

换行符

\r

回车符

\t

制表符

\b

退格符

\f

换页符

4.字符串使用——拼接字符+就可以

确定一个字符串长度s.length

http://www.cnblogs.com/zhaoxinxin/articles/1402733.html字符串的相关操作

除length属性,字符串还提供可以调用的方法:

注意:在js中字符串是固定不变的,类似replace()和toUpperCase()方法都返回新字符串,原字符串本身没有变化

5.模式匹配

js中定义RegExp()构造函数,用来创建文本匹配模式的对象——这些模式为“正则表达式

三.布尔值

1.if语句用来判断真假true false

2.布尔值包含toString法法,可以将字符串转换为“true”或“false”

&&执行逻辑与and的操作,全真才返回

||是布尔或(or)操作,两操作数有真就返回true,全假返回false

一元操作符“!”执行布尔非(not)

四.null和undefined

1.null是空值,对null执行typeof预算,结果返回字符串“object”——(含义)非对象,可以表示数字,字符串,对象是无值的

2.undefined,用未定义的值表示更深层次的“空值”。是变量的一种取值,表明变量没有初始化。若要查询对象属性或数组元素的值时返回undefined则说明这个属性或元素不存在。没有返回值则返回undefined

3.undefined表示未定义,可以赋任意值。若使用typeof运算符得到undefined的类型,则返回undefined,表明该值时这个类型的唯一成员。

4.null和undefined不同,但是都表示值的空缺,可以互换,判断相等时认为两者相等(严格用===)

五.全局对象

var global = this;//定义一个引用全局对象的全局变量

在客户端js中,在其表示的浏览器窗口中的所有js代码中,Window对象充当全局对象.

六.包装对象

1.js对象是一种复合值:他是属性或已命名值的集合。通过“.”来引用属性值。当属性值为函数——称为方法。通过o.m()来调用对象o中的方法

var s ="hello world";//一个字符串
var word = s.substring(s.indexOf(" ")+1,s.length);//使用字符串的属性

字符串不是对象应该没有属性,但是通过调用new String(s)的方式转换成对象,这个对象可以继承字符串的方法,并用于处理属性的引用。(数字有Number(),布尔值有Boolean()构造函数创建一个临时对象)

2.存取字符串,数字或布尔值的属性时创建临时对象——包装对象

可通过String(),Number(),Boolean()构造函数来显示创建包装对象

 var s = "test",n=1,b=true;//一个字符串,数字和布尔值
 var S = new String(s);//一个字符串对象
 var N = new Number(n);//一个数值对象
 var B = new Boolean(b);//一个布尔对象

七.不可变得原始值和可变的对象引用

  var s = "hello";
  s.toUpperCase();
  console.log(s);

打印的s仍未原来的值

1.原始值的比较是值的比较,只有值相等的时候他们才相等

2.对象和原始值不同,他们可变的——值可修改

var o={x:1};//定义对象
o.x = 2;//通过修改对象属性值改变对象
o.y = 3;//添加新属性(也算改变对象)

3.数组也是可以修改的

var a = [1,2,3];
a[0] = 0;//修改数组的一个元素
a[3] = 4;//给数组增加一个新元素

4.对象的比较不是值得比较,即使两个对象包含相同的属性及相同的值

 var o = {x:1}, p = {x:1};
 o===p;//false:两单独的对象永不相等,空数组也不相等

5.将对象称为引用类型

6.

var a = [];
b = a;
b[0] = 1;
document.write(a[0]);

打印得1

7.

var a = ['a','b','c'];
var b = a;
b[0] = 1;
document.write(a[0]);

打印得1

8.

var a = ['a','b','c'];
var b = [];
for(var i = 0;i<a.length;i++)
{
    b[i] = a[i];
}

9.比较两个数组的函数

function equalArray(a,b) {
    if(a.length !=b.length)
        return false;
    for(var i = 0;i<a.length;i++)
        if(a[i]!=b[i]) return false;//任意两个元素不等,则数组不相等
    return true;
}

八.类型转换

1.

2.字符串转数字——NaN类型

3.==进行类型转换

注意:一个值转换为另一个值并不是两值相等

4. 显式类型转换

方法:使用Boolean(),Number(),String(),Object()

除了null或undefined任何值都有toString()方法

Number类定义的toString方法可以接收表示转换基数的可选参数

parseInt()只解析整数,parseFloat()可以解析整数和浮点数,如果第一个非空格字符是非法的数字直接量,将最终返回NaN

parseInt("3 blind mice")//3
parseInt("0.1");//0.1
parseFloat("3.14 meters")//3.14
parseInt("-12.4");//-12
parseInt("0xff");//255
parseFloat(".1");//0.1
parseInt(".1");//NaN,整数不以.开始
parseFloat("$72.56");//NaN,数字不以“$”开始

5.对象转换为原始值

所有的对象继承了两个转换方法:①toString(),返回一个反映这个对象的字符串。默认的toString()方法不会返回一个有趣的值

[1,2,3].toString();
(function (x) {
    f(x);
}).toString();
/\d+/g.toString();
new Date(2010,0,1).toString();

②valueOf()函数:若存在任意原始值,他就默认将对象转换为表示他的原始值。对象是复合值,而且多数对象无法真正表示一个原始值,所以默认valueOf()方法简单的返回对象本身,二不是返回一个原始值

数组,函数和正则表达式继承这个默认方法,调用这些类型的实例的valueOf方法只是简单返回对象本身

这两个方法做到对象到字符串和对象到数字的转换。

九.变量声明

变量使用var声明

十.变量作用域

1.函数体内,局部变量高于同名的全局变量的优先级

2.若在函数体内声明的一个局部变量或函数参数中带有的变量和全局变量重名,则全局变量被局部变量所遮盖

3.函数定义可以嵌套。

4.

5.使用this引用全局对象,但是没有方法可以引用局部变量中存放的对象

6.作用域链(是一个对象列表或者链表)

作用域链的概念对理解with语句和闭包很重要

猜你喜欢

转载自blog.csdn.net/weixin_41056807/article/details/82423620