JavaScipt的坑(一)

函数作用域
js没有块级作用域

function test(){
var i = 0;
if(i==0){
var j=0;
for(var k=0;k<10;k++){
console.log(k) //0,1,2...9
}
console.log(k);//10
}
console.log(j);//0
}
test();

声明提前:(变量的初始化还是在原位置)《JavaScript权威指南》P57
P94 for循环里声明的变量也会“提前”

var scope = "global";
function f(){
console.log('1 '+scope);  //1 undefined
var scope = 'local';
console.log('2 '+scope); //2 local
}
f();

js所有数字都是浮点型的。P70
5/2 = 2.5 , 0 / 0 = NaN,
3/0 = Infinity(正无穷大,不报错)-1/0 = -Infinity(负无穷大,不报错)
6.5%2.1 = 0.2(%求余运算也适用于浮点数,经检验结果是0.19999999999999973)

null和undefined

undefined==null  //true
undefined==undefined   //true
null == null  //true
NaN ==NaN   //false
null == undefined   //true
null === undefined   //false
typeof null  //"object"
typeof undefined   //"undefined"

P71

true+true//2 布尔值转化为数字
1+{}   //"1[object Object]"  对象转化为字符串后进行字符串连接
2+null  //2  null转化为0进行加法
1+NaN  //NaN
2+undefined  //NaN  undefined转为NaN进行加法
1+2+"nice"  //"3nice"
1+(2+"nice")  //"12nice"
yunsuan.png

"++"从不做字符串连接操作P72

x="1";x+1  //"11"
x="1";x++  //1
x  //2
x="1";++x //2

恒等运算符===

var s="s";var t=new String("s");
s==t;   //true
s===t;  //false

闭包(课外)

function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push(function () {
            return i * i;
        });
    }
    return arr;
}

var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];
f1();//16
f2();//16
f3();//16

检测一个对象是否是另一个对象的原型(或者在原型链中),使用isPrototypeOf()方法。(P139)
例:p.isPrototypeOf(q); //检测p是否是q的原型

数组
1.js数组可能是稀疏的,数组元素的索引不一定要连续的,它们之间可以有空缺。
2.如果数组是稀疏的,length属性值大于元素个数,即包含稀疏元素。
3.数组直接量的语法允许有可选的结尾的逗号。例:
var arr=[,,];//数组只有2个元素(不是3个,缺省值),都是undefined,且这不是稀疏数组。P147
4.将数组的length设置为一个比当前长度小的非负整数n,则删除大于或等于n的索引的元素。例:a.length=0;//删除数组a的所有元素
.将数组的length设置为一个比当前长度大的非负整数n,实际上不会向数组添加新的元素,而在数组尾部创建一个空的区域。
5.for/in循环能够枚举继承的属性名。数组遍历不建议使用这样的遍历方式。
6.forEach遍历数组:P151
arr.forEach(function(x){
alert(x);
})
7.数组元素拼接:arr.join(); P152
将数组中的所有元素都转换成字符串并拼接起来,返回最后生成的字符串。可指定一个字符串在生成字符串时分隔各个元素。若不指定,则默认使用逗号分隔。
var a=[1,2,3];
a.join(); //"1,2,3"
a.join(" ");//"1 2 3"
String.split()是将字符串分割成若干部分来组成数组。
8.数组反转:arr.reverse(); P152
将数组中的元素颠倒顺序,返回逆序的数组。
var a=[1,2,3];
a.reverse();//a=[3,2,1];
9.数组排序:arr.sort(); P152
如果数组包含undefined,则被排到最后。
var a=[2,1,4];
a.sort(); //a=[1, 2, 4]
10.拼接数组:arr.concat();
var a=[1,2];
a.concat(3,4);//a=[1,2,3,4]
11.arr.slice();返回数组的一个片段或者子数组(不修改调用的数组)。
var a=[1,2,3,4,5];
a.slice(0,3);//[1,2,3]
a.slice(3);//[4,5] 返回下标为3至数组结束的子数组。
a.slice(1,-1);//[2,3,4] -1表示数组最后一个元素的前一个,返回下标为1至倒数第二个元素。
a.slice(-3,-2);//[3]
12.splice() 在数组中插入或删除元素(修改调用的数组)P154
13.unshift()和shift()
unshift():在数组的头部添加一个或多个元素,并将已存在的元素移动到更高的索引来获取足够的空间,并返回数组新的长度。
shift():删除数组的第一个元素并将其返回,然后把所有随后的元素下移一个位置连填补数组头部的空缺。
var a=[];
a.unshift(1);//a = [1],返回1(长度)
a.unshift(2,[3,4]);//a=[1,2,[3,4]],返回3(长度)
a.shift(); //a=[2,[3,4]],返回1(删除的元素)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Javascript有很多数组的方法,有的人有W3C的API,还可以去MDN上去找,但是我觉得API上说的不全,M...
    顽皮的雪狐七七阅读 4,259评论 0 6
  • js基础篇(三)——DOM的各种操作js基础篇(二)——字符串的各种操作 1. 创建数组 创建一个数组,有三种方法...
    hanyuntao阅读 1,657评论 0 14
  • 数组的定义 数组是按序号排列的一组值,每个值的位置都有编号(从0开始)。数组本质上是一种特殊的对象。它的键名是按(...
    Allin_Lin阅读 581评论 0 0
  • 由于最近都在freecodecamp上刷代码,运用了很多JavaScript数组的方法,因此做了一份关于JavaS...
    2bc5f46e925b阅读 2,049评论 0 16
  • 《遇见,预见课程拓展课程》 2017年5月2日 温州绣山中学 《遇见,预见课程拓展课程》 音乐欣赏: 问:刚才反复...
    文釆生辉阅读 345评论 0 0