一、String类型
- 字符串是不可变的,字符串一旦创建它们的值就不能改变,想改变某个变量保存的字符串,首先需要销毁原来的字符串,再用另一个包含新值的字符串填充该变量。所以当使用+拼接字符串的时候是创建一个新的字符串对象。
- 转换字符串的方法:
a: toString() 一般不传参,如果传参可以传递输出数值的基数,即进制,null,undefined没有toString方法,所以当判断转换的值是否为null、undefined的时候,需要使用String()转换为“null”,“undefined”。
b: 使用+号拼接字符串。
二、Object类型
Object的每个实例所具有的属性和方法:
- constructor: 构造函数,保存着用于创建当前对象的函数。
- hasOwnProperty(“属性名”) : 检查给定的属性在当前对象实例(不是对象原型)中是否存在。
- isPrototypeof(object): 检查传入的对象是否是当前对象的原型。
- propertyIsEnumerable(“属性名”): 检查给定的属性是否能使用for-in语句。
- toLocaleString(): 返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString(): 返回对象的字符串表示。
- valueOf(): 返回对象的字符串、数值或布尔值表示。
三、逻辑运算符
&& 和 || 都属于短路操作,如果第一个操作数能决定结果,那么就不会对第二个操作数求值了,逻辑与运算符 && 如果第一个值是false那这个结果一定是false,后面的都不需要看了。而逻辑或运算符 || 如果第一个值为true,则后面的也是不需要再看了。
js中常见的用法就是:
var flag = ss || sss ; 通过或运算符避免为变量赋值null或undefined
四、关于运算符
1.对于加运算符,如果想打印输出的结果是计算后的,需要加上圆括号。
console.log("sum is" + (a + b))
对于任何操作数与NaN的比较,结果都是false.
2.对于相等操作符, == 和 != 是强制转型,需要先转换数据类型再比较。而 === 和 !== 仅仅是比较,不转换数据类型。
以下是比较容易错的表达式判断:
表达式 | 值 |
---|---|
NaN == NaN | false |
NaN != NaN | true |
null == undefined | false |
“NaN” != NaN | false |
5 == NaN | false |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
“5” == 5 | true |
null === undefined | false |
null 和undefined是属于类型相似的,所以判断是相等,而和数值0完全不同,所以是false.
3.逗号运算符多用于声明变量,还可用于赋值,总会返回表达式中最后一项的值。
其他常用的运算符还有很多,今天主要总结了几个不常用容易出错的点。
五、区分for循环
1.for-in 用来枚举对象的属性
for(var propertyName in obj) {
}
需要注意循环出的属性名顺序是不可预测的。
为了防止循环对象报错,一般需要先判断该对象的值是不是null或者undefined。
六、break,continue,流控制语句
break是中断循环不再执行。
continue是跳出当前循环。
switch语句和其他语言用到的不同,不仅可以用常量还可以用变量和表达式,不仅可以是数值还可以是字符串、对象等任何数据类型。
switch比较的时候使用的是全等运算符,不会发生类型转换。
七、关于函数
函数的返回值一般使用return进行返回值的操作。
注意:位于return后面的任何代码都不会执行。
return; 会返回undefined。
不带有返回值的return,一般用于需要提前中止函数执行而又不需要返回值的情况下使用。
函数的参数是通过arguments对象来访问这个参数数组,再传递给函数的每一个参数,arguments[0]可以通过这种形式获取参数。
通过arguments.length可以知道传递了几个参数。
arguments的值永远与对应命名参数的值保持同步。即修改arguments参数列表的值,对应的参数值会修改,内存空间不同但是会值同步。所有参数传递的都是值,不可能通过引用传递参数。
八、JavaScript没有重载。
因为不存在函数签名的特性,函数和变量都是以后定义的覆盖掉前面的方法去执行。