React Native

JS基础学习(二)

2017-03-03  本文已影响31人  寒桥

表达式和运算符
语句

表达式和运算符

一些例子如下:
1 + 2    // =>3: 加法
"1" + "2"    // =>"12": 字符串连接
"1" + 2    // =>"12": 数字转换成字符串后进行字符串拼接
1 + {}    // =>"1[object Object]": 对象转换成字符串后进行字符串拼接
true + true    // =>2: 布尔值转换成数字后做加法
1 + null    // =>1: null转换为0后做加法
1 + undefined    // =>NaN: undefined转换成NaN后做加法
需要注意的是,要考虑加法的结合律
1 + 2 + "blind mice" // => "3 blind mice"
1 + (2 + "bind mice") // => "12bind mice"
举例说明:
var point = {x: 1, y:1}; // 定义一个对象
"x" in point // =>true:对象中有一个名为"x"的属性
"z" in point // =>false对象中没有一个名为"z"的属性
"toString" in point // =>true:对象继承了toString()方法

var data = [7, 8, 9]; // 拥有三个元素的数组
"0" in data // =>true:数组包含元素"0"
1 in data // =>true:数字转换成字符串
3 in data // =>false:没有索引为3的元素
var d = new Date(); // 通过Date()构造函数来创建一个新对象
d instanceof Date; // true  d是由Date()创建的
d instanceof Object; // true  所有的对象都是Object的实例
d instanceof Number; // false, d不是一个Number对象
        
var a = [1, 2, 3];  // 通过数组直接量的写法创建一个数组
a instanceof Array; // true  a是一个数组
a instanceof Object; // true 所有的数组都是对象
a instanceof RegExp; // false  数组不是正则表达式

需要注意的是,所有的对象都是Object实例
// 如果max_width已经定义了,直接使用它;否则在preferences对象中查找max_width
// 如果没有定义它,则是用一个写死的常量
var max = max_width || preferences.max_width || 500;

这种惯用法通常在函数体内,用来给参数提供默认值
// 将o的成员属性复制到p中,并返回p
function copy(o, p) {
     p = p || {}; // 如果向参数p没有传入任何对象,则使用一个新创建的对象
     // 函数体内的主逻辑
}
x typeof x
undefined "undefined"
null "object"
true或false "boolean"
任意数字或NaN "number"
任意字符串 "string"
任意函数 "function"
任意内置函数(非对象) "object"
任意宿主对象 由编译器各自实现的字符串,但不是"undefined"、"boolean"、"number"或"string"
var o = {x: 1, y: 2}; // 定义一个对象
delete o.x; // 删除一个属性
"x" in o // false: 这个属性在对象中不再存在了
        
var a = [1, 2, 3];  // 定义一个数组
delete a[2]; // 删除最后一个数组元素
2 in a // false: 元素2在数组中已经不存在了
a.length  // =>3:注意数组长度并没有变,尽管上一行代码删除了这个元素,但删除操作留下了一个"洞"
(在该处设置了一个undefined的值),实际上并没有修改数组的长度,因此a数组的长度仍是3

当删除一个属性时,这个属性将不再存在。读取一个不存在的属性将返回undefined,但是可以通过in运算符
来检测这个属性是否在对象中存在
var o = {x: 1, y: 2}; // 定义一个变量,初始化为对象
delete o.x; // 删除一个对象属性,返回true
typeof o.x; // 属性不存在,返回"undefined"
delete o.x; // 删除不存在的属性,返回true
delete o;   // 不能删除通过var变量声明的变量,返回false
            // 在严格模式下,将抛出一个异常
delete 1;   // 参数不是一个左值,返回true
this.x = 1; // 给全局对象定义一个属性,这里没有使用var
delete x;   // 试图删除它,在非严格模式下返回false
            // 在严格模式下会抛出异常,这是使用"delete this.x"来代替
x;          // 运行时错误,没有定义x

语句

try/catch/finally的语法和使用目的
try {
   // 通常来讲,这里的代码会从头执行到尾而不会产生任何问题
   // 但有时会抛出一个异常,要么是由throw语句直接抛出异常
   // 要么是通过调用一个方法间接抛出异常  
}  catch(e)  {
   // 当且仅当try语句抛出了异常,才会执行这里的代码
   // 这里可以通过局部变量e来获得对Error对象或者抛出的其他值的引用
   // 这里的代码块可以基于某种原因处理这个异常,也可以忽略这个异常
   // 还可以通过throw语句重新抛出异常
}  finally  {
   // 不管try语句块是否抛出了异常,这里的逻辑总会执行,终止try语句块的方式有:
   // 1)正常终止,执行完语句块的最后一条语句
   // 2)通过break、continue或return语句终止
   // 3)抛出一个异常,异常被catch从句捕获
   // 4) 抛出一个异常,异常未被捕获,继续向上传播  
}
上一篇下一篇

猜你喜欢

热点阅读