条件语句之switch-case-break
- switch语句中的case比较是严格相等运算(===),而不是普通相等运算(==),这意味着比较时不会发生类型转换。
- 通常,每个case后带上break语句。
if语句、while语句、定义函数的循环体
- if语句、while语句的循环体只有一条语句时可以省略花括号。
- 定义函数时的函数体,不管其包含一条还是多条语句,花括号都不能省略!
JavaScript的数据类型
- ES5标准规定JS的数据类型分为6种,分别为:
- number:包括整数和小数
- string:字符串
- boolean:布尔值,值域为true和false
- undefined:表示只声明没赋值,或变量不存在
- null:表示空值,引用为空
- object:对象,各种值得组合
- 数值、字符串、布尔值这三种类型,属于原始类型(primitive type);对象则称为合成类型(complex type)的值,因为对象往往是多个原始类型的值的组合;至于undefined和null,一般将它们看成两个特殊值。
- 对象是最复杂的数据类型,又可以分成三种子类型:
- 狭义的对象(object)
- 数组(array)
- 函数(function)
JavaScript确定某值类型的3种方法
- typeof运算符
- typeof 123 → "number"
- typeof '123' → "string"
- typeof false → "boolean"
- typeof 某函数 → "function"
- typeof undefined → "undefined"
- typeof 未定义的变量 → "undefined"
- typeof null → "object"
- typeof { } → "object"
- typeof [ ] → "object"
- instanceof运算符
- Object.prototype.toString方法
null和undefined的区别
- 相同点:null与undefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。转为布尔值都是false
- 不同点:null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。
原始值或对象→布尔值
在需要布尔值的地方,变量会被自动转换成对应的布尔值!只有下面6种情况会被转换为false,其余都会被换成true!
- undefined → false
- null → false
- false → false
- 0 → false
- NaN → false
- 空字符串 → false
模板字符串
模板字符串可以较好地替代“+”进行字符串的拼接,但是需要注意模板字符串是包含在反引号内的,不是常规的正引号!
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
对象的易错点
- 对象的属性名是字符串或合法的标识符,但本质依旧是字符串。
- 访问对象的属性:objectName.propertyName或objectName["propertyName"]
- 对象属性成员判断:
- "propertyName" in objectName,注意属性名必须是字符串,不区分自有属性和继承属性。
- objectName.hasOwnProperty("propertyName"),属性名必须是字符串,检测是否为自有属性。
遍历数组元素和对象属性
// 遍历数组的元素
for (var i=0; i<arr.length; i++) {
console.log(arr[i]);
}
// 遍历对象的属性
for (var key in obj) {
// 可在输出前用hasOwnProperty()过滤自有属性
console.log(obj[key]);
}
JavaScript 对象的解构赋值
-
有些时候,如果变量已经被声明了,再次赋值的时候,正确的写法也会报语法错误:
var x, y; // 声明变量 // 下面的解构赋值,报语法错误: Uncaught SyntaxError {x, y} = { name: '小明', x: 100, y: 200};
-
这是因为JavaScript引擎把{开头的语句当作了块处理,于是=不再合法。解决方法是用小括号括起来:
({x, y} = { name: '小明', x: 100, y: 200});
JavaScript 字符串→数字
- 使用Number()函数
- 使用parseInt()函数
-
两者区别:
function returnInt(element) { return parseInt(element, 10); } ['1', '2', '3'].map(returnInt); // [1, 2, 3] // Same as above, but using the concise arrow function syntax ['1', '2', '3'].map( str => parseInt(str) ); // A simpler way to achieve the above, while avoiding the "gotcha": ['1', '2', '3'].map(Number); // [1, 2, 3] // Number() will also return a float or (resolved) exponential notation: ['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300] // For comparison, if we use parseInt() on the array above: ['1.1', '2.2e2', '3e300'].map( str => parseInt(str) ); // [1, 2, 3]
-
parseInt函数不适合直接用于array.map()函数,demo:
["1", "2", "3"].map(parseInt); // 返回 [1, NaN, NaN]
JavaScript从入门到放弃^^
- 未完待续...
网友评论