JavaScipt的坑(一)

作者: zyfEve | 来源:发表于2016-10-12 14:43 被阅读37次

函数作用域
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(删除的元素)

相关文章

  • JavaScipt的坑(一)

    函数作用域js没有块级作用域 声明提前:(变量的初始化还是在原位置)《JavaScript权威指南》P57P94 ...

  • ECMAScript新特性

    ECMAScript通常看作JavaScipt的标准化规范,实际上JavaScipt是ECMAScript的扩展语...

  • JavaScipt原型

    我们先定义一个构造器(函数): 原型对象 原型是个很抽象的概念,因为我们并不能看到它。当定义了一个构造器(也就是创...

  • Javascipt(3)

    JS中的函数 一、定义绝对值函数 第一种方式: 第二种方式: 函数相当于是匿名的,可以把结果赋值给abs,通过ab...

  • AJAX

    Ajax定义 "Asynchronous Javascipt And XML":异步JavaScript和XML。...

  • 补发实习第一二天:关于数组的基本知识点及其核心算法

    2018.9.20-9.21自学手册2018.9.20body中的javascipt函数

  • Webstorm关闭分号提示

    ctrl/cmd+调出Prefernces配置,选到Code Style JavaScipt 再Punctuati...

  • 原型与原型链

    一、prototype在JavaScipt中,每个函数都有一个prototype属性,这个属性指向着函数的原型对象...

  • JavaScipt中的变量提升

    看了许多关于介绍Javascript变量提升的文章,刚开始跟着示例去看时似懂非懂,经过自己敲代码测试后才有所...

  • 小白的JS之路--多态

    对长点评:在面向对象中的多态,在JavaScipt中实现起来就是这么容易。

网友评论

    本文标题:JavaScipt的坑(一)

    本文链接:https://www.haomeiwen.com/subject/izyrdttx.html