JavaScript 学习笔记

Author: yifei / Created: May 30, 2017, 3:53 p.m. / Modified: May 30, 2017, 7:53 p.m. / Edit



Object to bool,全部转换为True,包括 [] {}和new Boolean(false)

to string 首先调用toString(),如果没有然后调用valueOf()

to number 首先调用valueOf(),如果没有然后调用toString()


Array.sort([func])  // function cmp(a, b) {return a - b;}, implace
Array.concat(val or array)  // combination of python append and extend, will not recursively smash array, return new
Array.slice(a, b)  // allow negative
Array.splice(a, b, replacements...)  // both a and b are inclusive
indexOf/lastIndexOf  // return the first find index or -1 if not found
forEach  // no way to good stop the iteration
map  // return a new array
filter   //return the selected elements
every/some  // return true or false, return immediately after the result is dicided 
reduce  //reduce(function(a, b) {}, initial_value), when not supplied, the first element is used as initial value on empty array, no initial value will throw error

ES5 functional array methods

they are both defined as Array.prototype.method and Array.method in firefox

common pattern

array.method(function(value, index, array) {}, this) // second parameter is treated as this in the function

using strings as arrays, parameters)


normal function

in ES3 and ES5, this is window by default. in ES5 strict mode, this is undefined. in ES6 arrow function, this is inherited from outer function

constructor function

function MyClass(x, y) {
    this.x = x;
    this.y = y;

var m = new MyClass(3, 5);

this is the new constructed object, But, if something is returned from the constructor, then the temporary object is thrown

function MyOtherClass(x, y) {
    return new MyClass(x, y);

var m = new MyOtherClass(x, y);

method function

point.setX = function (x) {
    this.x = x;

this is the object

tricky closure

function constfuncs() {
    var funcs = [];
    for (var i = 0; i < 10; i++) {
        funcs[i] = function() {return i;} // they refers to only one i in the closure, which is 10 in the end
    return funcs;

var funcs = constfuncs();
funcs[5]() // returns 10,

call and apply, params...) is equal to obj.func(params...) func.apply(obj, [params...]) func.bind(obj) will return a function with this bound as obj to the function

call any method against null or undefined will result in TypeError   by default this for a function in strict mode is undefined   + prefer both operands to be numbers, comparison prefers both operands to be strings   if a property is not found in a object, it's looked up in the prototype, if not, it's looked up object created by new 's prototype is the constructor's prototype object created by    


  if two instances inherited from the same prototype, we say then are inherited from the same class. by default, the prototype is constructor's prototype  


  SubClass.prototype = Object.create(Base.prototype) SubClass.prototype.constructor = SubClass  

Regular Expression

  syntax: /regexp/modifier   Modifiers:   i ignore case g global, if not sepcified, return only one match m multiline   String expression methods: return first matched index or -1 String.replace(pattern, replacement) back reference is used as $n, replacement can be a function String.match(pattern) return an array of matched groups, [0] is the whole match, [n] being each group String.split(pattern) return a splited elements   Regexp methods:   regexp.exec(String) equals to String.match(regexp) regexp.test(String) true or false regexp.exec(String) can be called multitimes for a string when regexp is not global mode. Each returns the  




  new Data(); new Date(milliseconds); new Data(datestring); new Data(y, m, d, h, m, s, ms);  


  date.toString() return  a time string date.valueOf() returns timestamp returns current timestamp Date.parse() returns a timestamp Date.UTC(y, m, d, h, m, s, ms) returns utc timestamp  


  encodeURI() encode URI to %xx syntax encodeURIComponent encode every character including /?=+,# decodeURI   decodeURIComponent   isFinite()   isNaN   parseInt   parseFloat   Infinity      


  Math.random() // -> random number between 0 and 1   Number   Number.MAX_VALUE, Number.MIN_VALUE, Number.NaN, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY  


  String.charAt() String.charCodeAt() String.concat() String.indexOf/lastIndexOf() String.slice() String.substr(start, length) String.substring(from, to) String.toLowerCase()/toUpperCase() String.trim()

有任何问题可以发邮件到 kongyifei (at) 讨论