JavaScript 学习笔记


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

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()


评论区