【JavaScript】JavaScript的基本概念(ECMAScript)

变量

ECMAScript的变量是松散类型的,即可以用来保存任何类型的数据。(可以在修改变量值的同时修改值的类型)

var message = "hi", 
	found = false, 
	age = 29;

基本类型 vs 引用类型

类别基本类型引用类型
数据类型Undefined、Null、Boolean、Number、StringObject
属性添加不支持支持
变量复制
var a = b;
a, b相互独立,值复制值(指针)复制,引用同一个对象

数据类型

ECMAScript中有Undefined、Null、Boolean、Number、String和Object6种数据类型,不支持任何创建自定义类型的机制typeof 操作符可以检测给定变量的数据类型。

Undefined类型

Undefined类型只有一个值,即Undefined。在使用var声明变量但未对其初始化使用typeof检测尚未声明过的变量时,会获得Undefined。

Null类型

Null类型只有一个值,即null。从逻辑角度看,null值表示一个空对象指针,因此 typeof null == object。实际上,undefined值派生自null值,因此ECMA-262规定 null == undefined。

Boolean类型

该类型有true和false两个字面值(True和 False都不是 Boolean值,只是标识符),可以对任何数据类型的值调用Boolean()函数。

数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串" "
Number任何非零数字值(包括无穷大)0和NaN
Object任何对象null
Undefined-undefined

Number类型

该类型使用IEEE754格式表示整数和浮点数值(浮点数值存在舍入误差)。

  • 最基本的格式采用十进制整数,八进制字面值的首位必须是0(若后续数值超出范围,则前导零将被忽略,当作十进制数解析。严格模式下八进制无效),十六进制字面值的前两位必须是0x。
  • 浮点数值必须包含一个小数点,且小数点后必须至少有一位非0数字,可用e表示法(即科学计数法),最高精度是17位小数。
  • Number.MIN_VALUE(一般为5e-324)、Number.MAX_VALUE(一般为1.7976931348623157e+308),超出范围的值将自动转换为Infinity或-Infinity,使用isFinite()函数可判断一个数值是否有穷。
  • NaN表示非数值情况。任何涉及NaN的操作都会返回NaN,且NaN与任何值都不相等(包括其自身)。

数值转换

  • Number()适用于任何数据类型
var num1 = Number("Hello World!");	//NaN
var num2 = Number(" ");				//0
var num3 = Number("0011.1");		//11.1
var num4 = Number("0011abc");		//NaN
var num5 = Number(true);			//1
var num6 = Number(null);			//0
var num7;
Number(num7);						//NaN
  • parseInt()用于把字符串换成整数
var num1 = parseInt("1234blue");		//1234
var num2 = parseInt(" ");				//NaN
var num3 = parseInt("0xA");			//10
var num4 = parseInt("22.5");			//22
var num5 = parseInt("070");			//56
var num6 = parseInt("70");			//70
  • parseFloat()用于把字符串换成浮点数格式,只解析十进制值
var num1 = parseFloat("1234blue");		//1234
var num2 = parseFloat("0xA");			//0
var num3 = parseFloat("22.34.5");		//22.34
var num4 = parseFloat("22.5");			//22.5
var num5 = parseFloat("3.125e7");		//31250000

String类型

该类型用于表示由0或多个16位Unicode字符组成的字符序列,即字符串。包含转义序列。任何字符串的长度都可通过访问其length属性取得(不包含双字节字符时),且字符串是不可变的。

转换为字符串

  • toString()方法(数值、布尔值、对象和字符串值有,null和undefined值没有),可通过传递输出数值的基数输出以二进制、八进制、十进制、十六进制等格式表示的字符串值。
  • 转型函数String()适用于所有类型的值,遵循以下规则:
    – 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
    – 如果值为null,则返回"null"
    – 如果值为undefined,则返回"undefined"

Object类型

ECMAScript中的对象是一组数据和功能的集合,可通过 var o = new Object(); 来创建。Object的每个实例都具有下列属性和方法:

  • constructor:保存用于创建当前对象的函数
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在
  • isPrototypeof(object):用于检查传入的对象是否是当前对象的原型
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能用for-in语句来枚举
  • toLocaleString():返回对象的字符串表示,与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同

操作符

ECMAScript有算术操作符、位操作符、关系操作符和相等操作符,能够适用于字符串、数字值、布尔值,甚至对象。

  • 自增和自减
var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2;	//21
var num4 = num1-- + num2;	//22
var o = {
	valueof: function() {
		return -1;
	}
};
s1++;	//3
s2++;	//NaN
b++;	//1
f--;	//0.10000000000000009
o--;	//-2
  • 一元加减操作符
var s1 = "01";
var s2 = "z";
var s3 = "1.1";
var f = 1.1;
var b = false;
var o = {
	valueof: function() {
		return -1;
	}
};
s1 = +s1;	//1
s2 = -s2;	//NaN
s3 = +s3;	//1.1
f = -f;		//-1.1
b = +b;		//0
o = -o;		//1
  • 位操作符
    基本上与其他语言的位操作效果一样,但特殊的NaN和Infinity值会被当成0来处理。如果对非数值应用位操作符,会先使用Number()函数将该值转换为一个数值(自动完成),再应用位操作,得到一个数值。
位操作符号
按位非(NOT)~
按位与(AND)&
按位或(OR)|
按位异或(XOR)^
- 左移操作不会影响操作数的符号位
- >> 是有符号的右移,会用符号位的值来填充所有空位
- >>> 是无符号右移,会用0来填充所有空位
  • 布尔操作符
  1. 逻辑非
条件布尔值
对象、非空字符串、非零数值false
空字符串、0、null、NaN、undefinedtrue
  1. 逻辑与
    • 如果第一个操作数是对象,则返回第二个操作数;
    • 如果第二个操作数是对象,则只有在第一个操作数的结果为true时才会返回该对象;
    • 如果两个操作数都是对象,则返回第二个操作数;
    • 如果第一个操作数是null、NaN、undefined,则返回其本身。
  2. 逻辑或
    • 如果第一个操作数是对象,则返回第二个操作数;
    • 如果第二个操作数是对象,则只有在第一个操作数的结果为false时才会返回该对象;
    • 如果两个操作数都是对象,则返回第一个操作数;
    • 如果第一个操作数是null、NaN、undefined,则返回其本身。
  • 乘性操作符、加性操作符
    操作数为非数值时会自动转换为数值(加法操作符会在操作数为字符串时进行字符串的拼接)
  • 关系操作符
    NaN不能作比较(结果总是false),其余非数值操作数进行转换或比较得到一个布尔值。
  • 相等操作符
    1. 相等和不相等
      - null和undefined是相等的
      - 如果有一个操作数是NaN,则不相等
      - 如果两个操作数都是对象,则比较它们是不是同一个对象
    2. 全等和不全等
      只在两个操作数未经转换就相等的情况下返回true(null !== undefined)
  • 条件操作符
    variable = boolean_expression ? true_value : false_value;
  • 赋值操作符
    复合赋值并不会带来任何性能的提升
  • 逗号操作符
    在用于赋值时,逗号操作符总会返回表达式中的最后一项。

语句

  • if语句
    会自动调用Boolean()将表达式结果转换为一个布尔值
  • do-while语句
    循环体内的代码至少会被执行一次
  • while语句
    循环体内的代码有可能永远不会被执行
  • for语句
    在循环内部定义的变量也可在外部访问到
  • for-in语句
    可以用来枚举对象的属性,但通过该语句循环输出的属性名顺序是不可预测的
  • label语句
  • break、continue语句
    break语句会立即退出循环强制执行循环后面的语句,而continue退出循环后会从循环的顶部继续执行。
    break和continue语句都可以与label语句联合使用,从而返回代码中特定的位置,多用于循环嵌套时。
  • with语句
    将代码的作用域设置到一个特定的对象中,严格模式下不准使用。大量使用with语句将导致性能下降。
with(location) {
	var qs = search.substring(1);
	var hostName = hostname;
	var url = href;
}
  • switch语句
    在比较值时使用的是全等操作符,因此不会发生类型转换。

函数

  • 可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数
  • 由于不存在函数签名的特性,ECMAScript函数不能重载
  • ECMAScript中所有参数传递的都是值,不可能通过引用传递参数。函数的参数是局部变量,会在执行完毕后立即被销毁。
function setName(obj) {
	obj.name = "Leo";
	obj = new Object();
	obj.name = "Lou";
}

var person = new Object();
setName(person);
alert(person.name);	//"Leo"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值