不要使用==比较,始终坚持使用===比较
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. javascript 和 jquery 博客

    http://www.cnblogs.com/starof/category/626164.html

  2. vb调试dll

    1.有两个工程BW_DetectCard.vbp(生成dll)及识别卡检测软件.vbp(生成exe) 2.打开工程<识别卡检测软件.vbp>,在文件--添加工程--现存,找到要引用的dll ...

  3. rocketmq发送消息代码

    DefaultMQProducer defaultMQProducer = new DefaultMQProducer(); defaultMQProducer.setProducerGroup(Co ...

  4. Android WebView学习

    Android WebView学习 文章来源:小小懒羊羊个人知识管理库 权限: <uses-permission android:name="android.permission.IN ...

  5. layui动态渲染生成select的option值

    脚本语言:设定默认值:直接拼接,然后根据返回值渲染select// 动态渲染脚本类型下拉框 // 1.发送ajax请求得到data // 2.将data渲染到页面上 function getDataL ...

  6. Java时间类总结

    java.util.Date 包含有年月日时分秒,精确到毫秒级别. 官方解释: // The class Date represents a specific instant in time, wit ...

  7. 2017-5-14 湘潭市赛 Similar Subsequence 分析+四维dp+一些简单优化

    Similar Subsequence Accepted : Submit : Time Limit : MS Memory Limit : KB Similar Subsequence For gi ...

  8. 【实用】如何在windows下快速截图?

    如何在windows下快速截图? 快速截图是很多人的需求.截图的工具和方案也很多,但是,这里给出一个通用的,被大众认为最高效的一个解决方案. 我们都知道键盘上有一个"prt sc" ...

  9. 算法之动态规划(最长递增子序列——LIS)

    最长递增子序列是动态规划中最经典的问题之一,我们从讨论这个问题开始,循序渐进的了解动态规划的相关知识要点. 在一个已知的序列 {a1, a 2,...an}中,取出若干数组成新的序列{ai1, ai ...

  10. codeforces(559C)--C. Gerald and Giant Chess(组合数学)

    C. Gerald and Giant Chess time limit per test 2 seconds memory limit per test 256 megabytes input st ...