不要使用==比较,始终坚持使用===比较
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. 推荐系统学习03-SVDFeature

    介绍 SVDFeature是由Apex Data & Knowledge Management Lab在KDD CUP11竞赛中开发出来的工具包.它的目的是有效地解决基于特征的矩阵分解.新的模 ...

  2. tomcat的安装、配置

    简单介绍 Tomcat server是一个免费的开放源码的Web 应用server,属于轻量级应用server, 在中小型系统和并发訪问用户不是非常多的场合下被普遍使用,是开发和调试JSP 程序的首选 ...

  3. jQuery select的操作实现代码

          //改变时的事件  $("#testSelect").change(function(){ //事件发生生 jQuery('option:selected', this ...

  4. Atitit.跨语言反射api 兼容性提升与增强 java c#。Net  php  js

    Atitit.跨语言反射api 兼容性提升与增强 java c#.Net  php  js 1. 什么是反射1 1.1.       反射提供的主要功能:1 1.2.       实现反射的过程:1 ...

  5. Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++

    Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++ 1. 查找nas的原理1 2. 与dlna的关系1 3. 与ssdp的关系1 4. Cling - Ja ...

  6. IDEA13中配置struts错误:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter +找不到java程序包 解决办法

    问题一:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter解决办法 1.确保所有strut ...

  7. leetcode_Power of Two_easy

    Given an integer, write a function to determine if it is a power of two. 题目意思:推断某个数是否是2的幂. 方法:直接进行bi ...

  8. Office-Excel取消掉每次打开弹出的自定义项安装程序弹窗

    电脑重装了系统之后,重新安装了office2013,发现每次打开Excel都会弹出一个如下图所示的弹窗,比较烦人. 要取消掉这个弹窗也是比较简单的. 打开“文件”--“选项”--“加载项” 在下面的管 ...

  9. git设置及常用命令

    下载 下载地址:https://git-scm.com/downloads windows系统安装 默认安装即可. 其它系统安装方式请自行百度,网上教程很多. 设置 windows桌面右键,选择Git ...

  10. Redis入门经典——The Little Redis Book (翻译)

    The Little Redis Book By Karl Seguin 关于本书:本书全然免费下载.你能够任意转载,复制.但请你注明作者.Karl Seguin.译者,WY. 以及不要用于商业用途. ...