JavaScript学习笔记(一),更新至20150708

不熟悉地方的记录,以下JavaScript以Js简称。

2015-07-08 20:59:15

判断对象的属性是否存在:in 或者 hasOwnProperty( )

JavaScript中的true和false:把null、undefined、0、NaN和空字符串''视为false,其他值一概视为true,因此上述代码条件判断的结果是true。

Map类型:对Js中array和object的补充,注意的地方是遍历时要参数,以及函数的驼峰命名法

var m = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
m.forEach(function(element, index, map) {
    document.write(element + ':');
    document.write(index + '<br />');
});

typeof的用法:详见 - JavaScript中typeof知多少?

argument:解决一次性传入多个同等参数

function foo(x) {
    alert(x); // 10
    for (var i=0; i<arguments.length; i++) {
        alert(arguments[i]); // 10, 20, 30
    }
}
foo(10, 20, 30);

函数变量的定义:在哪定义,在哪使用;嵌套使用,内优于外;变量定义,放在前面。

很有趣的一个技巧变量命名冲突性的避免:自己设定一个全局变量,以后的所有变量都绑定在其上,如SXX.version

// 唯一的全局变量
MYAPP:var MYAPP = {};
// 其他变量:
MYAPP.name = 'myapp';
MYAPP.version = 1.0;
// 其他函数:
MYAPP.foo = function () {
    return 'foo';
};

关于ES6的看法:ES6是一个新出的标准,纵观Js的历史,每次新版本的发布,都差不多要十年才能被主流使用,这是前端开发的囧境。同样的,这个ES6估计要等到2020年才能充分的支持(目前firefox和chrome支持,ie8以后也支持),要提前只有等win10出来并大力推广其斯巴达浏览器,彻底消灭ie6-7以及基于这两款内核的部分国产浏览器了。介于此,至少在近几年,还是需要注意Js的写法,不能太多的使用ES6的属性,特别是在修改老的Js代码的时候。 关于ES6的一些变动,详细的可以参考这里 - ES6变动,这个博客的作者是校友紫云飞前辈,一起吃过一次饭,现就职于阿里。

Js中this的用法:this一般是在函数里面做函数体的递归调用(函数里面调用自己),也就是this方法替代的是他的父级函数的函数体。理解起来有点麻烦,这点在PHP中体现的比较好,在Js中,有的时候(如父级函数里面还有别的函数或者方法)也会只指向同级的函数或方法,为了避免发生错误,引用一个that来替换this。this在Js中,要慎用!

'use strict';
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        var that = this; // 在方法内部一开始就捕获this
        function getAgeFromBirth() {
            var y = new Date().getFullYear();            
            return y - that.birth; // 用that而不是this
        }        
        return getAgeFromBirth();
    }
};

xiaoming.age(); // 25

apple( ) 和 call( ) :很重要,用的比较多,关于两者参数的设定重点记住一下。都可以让一个函数内部的this调用参数设定的函数体。



2015-07-06 00:10:46

strict模式:Js设计之初,变量的定义没有强制要求加 var ,这样子会出现没加var限定的变量成为全局变量,而造成不可检测到的bug。ECMA组织后来规范了,但老程序还是有。

解决方法:在Js代码最前面,加上一句 

'use strict';

Unicode字符:相关的是中文字符,中文字符改如何处理呢。

解决方法:'\u6587' 表示 '文',同样的,我的名字可以表示为 '\u738b'  '\u521a'  '\u521a'

多行字符串:ES6标准新定义了一种模式,用反引号框起来。

浏览器要求:IE7以上,如果浏览器不支持,会报 SyntaxError 错误

alert(`
我是
一个小孩子
哈哈
`);

字符串的开挂使用:在适当的时候,可以将字符串当成数组用,但仅限于查询。

console >

var s='hello, world';
undefined
s[0];
"h"
s.length;
12
s[s.length-1];
"d"

看到这里:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143449922400335c44d4b8c904ff29a78fd4334347131000

你可能感兴趣的:(JavaScript)