Yifei Kong

May 30, 2017

JavaScript 学习笔记

Values

类型转换

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

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

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

Array

Array.join()    
Array.reverse() 
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
push/pop    
unshift/shift   
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

Array.method.call(str, parameters)

this

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

func.call(obj, 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    

class

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  

subclassing

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:   String.search(pattern) 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  

Date

Constructs

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

methods

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

Globals

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

Math

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

String

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