不要使用==比较,始终坚持使用===比较
false == 0; //返回true. 这种情况, 它会自动转换数据类型再比较
false === 0; //返回false. 建议用这种方式

NaN === NaN; //返回false. NaN与其他所有值都不相等, 包括它自己
isNaN(NaN); //返回true.

要计算两个浮点数是否相等, 要用绝对值 (因为浮点数在计算过程中会产生误差)
1 / 3 === (1 - 2 / 3); //返回false
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; //返回true

大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。

'use strict';//表示使用严谨模式
strict模式下, 会强制使用var来申明变量, 因为不用var申明的变量会被视为全局变量

ES6新增, 多行字符串的表示方法
`这是一个
多行
字符串`;

ES6新增, 模板字符串
var name = '小明';
var age = 20;
var msg = `你好, ${name}, 你今年${age}了!`;
alert(msg);

对字符串的某个索引赋值, 不会有任何效果
var s = 'Test';
s[0] = 'X';
alert(s); // s仍然为'Test'

直接给array的lenth赋一个新值, 会导致array的变化
var arr = [1,2,3];
arr.length; //3
arr.length = 5;
arr; //[1,2,3,undefined,undefined]
arr.length = 2;
arr; //[1,2]

操作array, 通过索引赋值时, 如果索引超过范围, 同样会引起array的变化
var arr = [1,2,3];
arr[5] = 'x';
arr; //[1,2,3,undefined,undefined,'x']

对象操作
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
'school' in xiaoming;//返回false. 判断一个属性是否存在, 但是in不能常用, 建议用hasOwnProperty
xiaoming.age = 18; //新增一个age属性
delete xiaoming.birth; //删除一个不存在的属性, 不会报错

JavaScript把null、undefined、0、NaN、空字符串''视为false,其他值一概视为true

遍历对象和数组

var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {//必须要用到hasOwnProperty
alert(key); // 'name', 'age', 'city'
}
}

var a = ['A', 'B', 'C'];
for (var i in a) {
alert(i); // '0', '1', '2', 注意, for..in对Array的循环得到的是String而不是Number
alert(a[i]); // 'A', 'B', 'C'
}

do..while循环, 在每次循环完成的时候才会去判断条件, 所以要小心, 循环体会至少执行1次
var n = 0;
do {
n = n + 1;
} while (n < 100);
n; // 100

ES6新增, Map和Set
Array/Map/Set都属于iterable(迭代)类型,
此类型的集合都可以通过新的for..of来遍历(修复for..in的遗留问题)

var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);//多次赋值会覆盖前面的
m.get('Adam'); // 88
或这样写,
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

var s2 = new Set();
s2.add(1);
s2.add(2);
s2.add(2);//重复的key会被忽略
s2.add('2');
s2; //Set {1, 2, "2"}
s2.delete(2);

var a = [1, 2, 3];
for (var x of a) { //遍历Array
console.log(x);
}
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of m) { //遍历Map
console.log(x[0] + '=' + x[1]);
}

iterable的遍历, 建议采用forEach
var a = new Map([['A','aaa'], ['B', 'bbb']]);
a.forEach(function (value, key, map) {
console.log(value);
});

ES6新增, rest参数
function foo(a, b, ...rest) { //rest参数只能写在最后, 前面用...标识
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1,2,3,4,[5,6]);

ES6新增, let声明块级作用域变量
var sum = 0;
for(let i=0; i<100; i++){
sum+=i;
}

ES6新增, 解构赋值
let [x, [, z]] = ['hello',['js', 'es6']];

ES6新增, 箭头函数
x => {
if (x > 0) {
return x * x;
}
else {
return - x * x;
}
}
x => {foo: x}; //报错, 应该这么写: x => ({ foo: x });

箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定 (修复this指向)

ES6新增, generator(生成器)数据类型
一个generator看上去像一个函数,但可以返回多次
try {
r1 = yield ajax('http://url-1', data1);
r2 = yield ajax('http://url-2', data2);
r3 = yield ajax('http://url-3', data3);
success(r3);
}
catch (err) {
handle(err);
}

有这么几条规则需要遵守:

不要使用new Number()、new Boolean()、new String()创建包装对象;

用parseInt()或parseFloat()来转换任意类型到number;

用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;

通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...};

typeof操作符可以判断出number、boolean、string、function和undefined;

判断Array要使用Array.isArray(arr);

判断null请使用myVar === null;

判断某个全局变量是否存在用typeof window.myVar === 'undefined';

函数内部判断某个变量是否存在用typeof myVar === 'undefined'。

最后有细心的同学指出,任何对象都有toString()方法吗?null和undefined就没有!确实如此,这两个特殊值要除外,虽然null还伪装成了object类型。

更细心的同学指出,number对象调用toString()报SyntaxError:

123.toString(); // SyntaxError
遇到这种情况,要特殊处理一下:

123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'

创建对象的最佳方式
<script>
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}

Person.prototype = {
constructor: Person,
sayName: function () {
alert(this.name);
}
}
var person1 = new Person('xiaoxiao', 26, 'engineer');
var person1 = new Person('xiaoxiao2', 28, 'engineer');
person1.sayName();
</script>

underscore常用函数
---集合对象
map / filter
every / some
max / min
groupBy
shuffle / sample
---数组
first / last
flatten
zip / unzip
object
range
---函数
bind
partial
memoize
once
delay
---对象
keys / allKeys
values
mapObject
invert
extend / extendOwn
clone
isEqual
chain

javascript基础(整理自廖雪峰)的更多相关文章

  1. JavaScript基础整理(1)

    最近读了<JavaScript权威指南>这本书,闲来无事对自认为重要的知识做了些整理,方便以后查阅. JavaScript中的最重要的类型就是对象,对象是名/值对的集合,或字符串到值映射的 ...

  2. JavaScript基础整理(2)

    接下来的重点是函数.我们知道函数是特殊的对象. 函数作用域和声明提前.JavaScript中没有块级作用域,只有函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意 函数体内都要定义. func ...

  3. JavaScript基础整理

    在HTML页面中嵌入JavaScript代码的三种方式 1.内嵌 写在<head>标签或<body>标签中 <script> function displayTim ...

  4. javascript基础(整理自手册网)

    变量 person=null; //清空变量 carname="Volvo"; //赋值给未声明的变量, 它将会变成全局变量, 即使在函数内部 window.carnam; //所 ...

  5. javascript 基础整理

    js编码标准 参考 数据类型 注意事项

  6. Javascript 基础知识笔记

    标签(空格分隔): 廖老师学习笔记 javascript 基本入门 根据廖雪峰老师官网,自己看后的简单笔记 第一小节 基本知识 <script type="text/javascrip ...

  7. JavaScript基础知识整理(2)

    15.处理图像 注意:(1)在写js文件时,尽量将函数的声明往后写,将函数调用写在前面,这样能够使代码结构很清晰. (2)一个网页中翻转器一般超过3个,所以使用for循环减少重复使用翻转器代码的次数. ...

  8. javascript基础入门知识点整理

    学习目标: - 掌握编程的基本思维 - 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔 ...

  9. phython廖雪峰

    这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...

随机推荐

  1. hadoop native本地库问题总结

    近期,打算hbase建表用snappy压缩时,碰到一些hadoop本地库的问题. 事实上这些问题是一直存在的,仅仅是不影响正常使用,就没有引起重视. 这次希望彻底解决下面问题: 问题一:运行start ...

  2. Visual studio C++ MFC之Menu editor

    背景 本篇旨在MSDN帮助文档下总结Menu editor的使用,并列出碰到的具体问题. 正文 创建Menu Editor 打开链接MSDN之Creating a Menu.按照文档的方法创建Menu ...

  3. 01-Hibernate Tools for Eclipse Plugins安装

    Hibernate Tools for Eclipse Plugins安装 在线安装有两种方法 方法一:"Help > Install New Software Updates&quo ...

  4. 关于继承Fragment后重写构造方法而产生的错误

    在android开发中.写了一个关于继承Fragment的类时,假设有重载构造函数时.会提示"Avoid non-default constructors in fragments: use ...

  5. node.js 学习02

    读写文件中的路径问题 readFile()读取文件函数中的./(相对路径)这个参数,相对的是执行node命令的路径,而不是相对于正在执行的这个js文件来查找.为了解决这个问题: __dirname(两 ...

  6. yum安装epel后报错

    Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfi ...

  7. Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js

    Atitit.Tree文件解析器的原理流程与设计实现  java  c# php js 1. 解析原理与流程1 1.1. 判断目录  ,表示服  dirFlagChar = "└├─&quo ...

  8. 在Jboss中使用Quartz

    Jboss EJB默认使用的定时服务是TimerService,TimerService的使用过程较为繁琐,需要使用一个无状态的serviceBean去实现scheduleTimer, timeout ...

  9. libevent源码学习_event结构体

    在libevent中最重要的结构体莫过于event和event_base了,下面对于这2个结构体进行分析. 1.结构体event,位于:event.h struct event { /* * 双向链表 ...

  10. Python内置函数之bytes()

    该函数是一个类对象: class bytes([source[,encoding[,errors]]]) 返回值为字节对象,当第一个参数为字符串时,必须提供第二个参数,第二个参数为编码类型的字符串. ...