среда, 4 июля 2018 г.

Javascript: да тут все просто, надо только помнить...

...

  • как правильно объявить переменную и задать ей значение: 'a = 1;'  или 'var a = 1;' или 'let a = 1;'  или 'const a = 1;' или 'this.a = 1;'  или 'self.a = 1;'  или 'this.['a'] = 1;'  или 'that.a= 1;' или 'лучше использовать параметр через замыкание вместо новой переменной'
  • new Date(1, 31, 2016) - это "02 марта 2016"
  • new Date("31.01.2016") - это "30 января 2016 22:00 UTC+3", а new Date("01.31.2016") - это "31 января 2016 00:00 UTC+3"
  • Date.getMonth(), но Date.getFullYear(), а не Date.getYear()
  • Date.setMonth, Date.setHours, но почему-то Date.setDate для 'day of the month'
  • '===' и '==' - это два разных алгоритма сравнения
  • NaN === NaN - это false
  • NaN === NaN , isNaN и Number.isNaN - это разные алгоритмы
  • Array.push/pop/slice, а classList.add/remove
  • ParentNode.children, но ParentNode.childElementCount и даже ParentNode.firstElementChild
  • ParentNode.children - это не то же самое что ParentNode.childNodes
  • ParentNode.childNodes - это live NodeList, а document.querySelectorAll - тоже NodeList, только static (not live)
  • (0.1 + 0.2) === 0.3 - нет, они не равны, это две разные цифры и результатом сравнения будет "false"
  • как правильно вызвать метод: 'run();' или 'this.run();' или '_self.run();' или 'run.apply(myObj);' или 'run.call(myObj);' или 'run.call(myObj, arguments);' или 'run.apply(myObj, arguments);' или 'run.call(myObj, start, end);' или 'run.call(myObj, arguments);' 
  • как правильно объявить метод: 'function run(a) {}' или 'this.run = function (a) {};' или 'this.run = (a) => {};' или 'this.run = run.bind(this);' или 'return { run = run.bind(self) };' или 'class { function run(a) {}}' или 'class { run(a) {}}'  или 'class { run = (a)=> {}}' или  'class { run(a) => {}}' и как в каждом варианте обращаться к переменным (локальным, внешним и this)
  • декларация 'function run() {;'  а вызов 'run(1, 2, 3)' потому что внутри можно 'arguments.forEach(...)'
  • function ff() {
        return
            1;
    }
    вернет undefined;
  • for(;;), for(.. in ..) или for(.. of ..) или forEach?
  • function.call или function.apply для array аргументов?
  • new Array([1,2]) - это [[1,2]], а new Array(1, 2) - это [1,2]
  • parseInt('10') - это 10, а parseInt('010') - это 8
И еще немного браузерных граблей:
  • MouseEvent.screenX, MouseEvent.clientX, window view port scrollX getBoundingClientRect и MouseEvent.offsetX
  • events конечно bubble, но если mousemove поверх div с position:absolute, то div под ним получит mouseleave
  • Element.addEventListener, или "<div click="myFunc()", или "<div click="myFunc", или "onClick = myFunc", или "onClick = ()=>myFunc()"
  • CustomEvent.type, а не CustomEvent.name
  • var scrollHeight = Math.max(
      document.body.scrollHeight, document.documentElement.scrollHeight,
      document.body.offsetHeight, document.documentElement.offsetHeight,
      document.body.clientHeight, document.documentElement.clientHeight
    ); - какое для чего и когда кого? +window.pageYOffset
нет, все нюансы бесполезно запомнинать...
проще поискать решение: google - найдется все!

Комментариев нет:

Отправить комментарий