语法部分

  1. type 属性: 默认的 type 就是 javascript, 所以不必显式指定 type 为 javascript

  2. javascript 不强制在每个语句结尾加 “;” , javascript 会自动加分号, 但是在某些情况下会改变程序的语义, 所以最好主动加 “;”

  3. 两个相等运算符比较

    ‘==’ 相等( 值相等 ), 它会自动转换数据类型再比较, 很多时候会得到非常诡异的结果

    ‘===’ 严格相等( 数据类型和值都相等 ) , 它不会自动转换数据类型, 如果数据类型不一致, 返回false, 如果一致, 再比较

  4. NaN 与所有其他值都不相等, 包括它自己:

    NaN === NaN; // false

    唯一能判断 NaN 的方法是通过 isNaN() 函数

    isNaN(NaN); // true

  5. 浮点数比较

    浮点数在运算过程中会产生误差, 因为计算机无法精确表示无限循环小数。 要比较两个浮点数是否相等, 只能计算它们之差的绝对值, 看是否小于某个阈值:Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

  6. null 和 undefined

    大多数情况下,我们都应该用 null , undefined 仅仅在判断函数参数是否传递的情况下有用

  7. 出于代码的可读性考虑,创建数组建议使用 '[ ]',而不使用 'new Array';

  8. 如果一个变量没有通过 'var' 声明就被使用,那么该变量就自动被声明为全局变量。使用 var 声明的变量则不是全局变量,它的范围就该被限制在该变量被声明的函数体内

  9. 启用 strict 模式(强制通过 var 声明变量)

  10. 多行字符串用反引号表示

  11. 使用模版字符串

  12. 要获取字符串某个指定位置的字符,使用类似 Array 的下标操作, 索引号从 0 开始。 字符串是不可变的, 如果对

    字符串的某个索引赋值, 不会有任何错误,但是也没有任何效果

  13. 直接给 Array 的 length 赋一个新的值会导致 Array 大小的变化

  14. 如果通过索引赋值时, 索引超过了范围, 同样会引起 `Array` 大小的变化, 但是不会有任何错误, 在编写代码时, 不建议直接修改 `Array` 的大小, 访问索引时要确保索引不会越界

  15. 数字 30 和字符串 '30' 是不同的元素

  16. slice() 的起止参数包括开始索引, 不包括结束索引。

  17. 如果不给 slice() 传递任何参数, 它就会从头到尾截取所有元素。 利用这一点, 我们可以很容易地复制一个 Array

  18. 空数组继续 `pop` 不会报错,而是返回 `undefined`

  19. `concat()` 方法并没有修改当前 `Array`, 而是返回了一个新的 `Array`,`concat()` 方法可以接收任意个元素和 `Array`, 并且自动把 `Array` 拆开, 然后全部添加到新的 `Array` 里

  20. `javascript` 对象属性名必须是一个有效的变量名。 如果属性名包含特殊字符, 就必须用 `''` 括起来

  21. 如果我们要检测 `xiaoming` 是否拥有某一属性, 可以用in操作符, 不过要小心, 如果 `in` 判断一个属性存在, 这个属性不一定是`xiaoming` 的, 它可能是 `xiaoming` 继承得到的

  22. 要判断一个属性是否是 `xiaoming` 自身拥有的,而不是继承得到的,可以用 `hasOwnProperty()` 方法

  23. JavaScript把 `null`、`undefined`、`0`、`NaN` 和空字符串 `''` 视为 `false`,其他值一概视为 `true`

  24. 由于 `Array` 也是对象, 而它的每个元素的索引被视为对象的属性, 因此, `for ... in` 循环可以直接循环出 `Array` 的索引

  25. `for ... in` 循环由于历史遗留问题, 它遍历的实际上是对象的属性名称, `for ... of` 循环则完全修复了这些问题, 它只循环集合本身的元素

web前端/html5学习群:250777811

函数

  1. 函数如果没有 `return` 语句, 函数执行完毕后也会返回结果, 只是结果为 `undefined`

  2. 由于 `JavaScript` 允许传入任意个参数而不影响调用, 因此传入的参数比定义的参数多也没有问题, 虽然函数内部并不需要这些参数, 传入的参数比定义的少也没有问题

  3. 关键字 `arguments` 类似 `Array` 但它不是一个 `Array`

  4. 不在任何函数内定义的变量就具有全局作用域。 实际上, `JavaScript` 默认有一个全局对象 `window`。 以变量方式 `var foo = function () {}` 定义的函数实际上也是一个全局变量。

  5. 用 `var that = this;` , 你就可以放心地在方法内部定义其他函数,而不是把所有语句都堆到一个方法中。 对于普通函数调用, 通常把 `this` 绑定为 `null`。

  6. `apply()` 与 `call()`的唯一区别

    - `apply()` 把参数打包成 `Array` 再传入;

    - `call()` 把参数按顺序传入。

  7. 所有实例的原型引用的是函数的 prototype 属性

  8. 箭头函数内部的 `this` 是词法作用域( 写代码或者定义时确定的 作用域,动态作用域是在运行时确定 ),由上下文确定。箭头函数完全修复了 `this` 的指向,`this` 总是指向词法作用域

标准对象

  1. 如果我们在使用 `Number`、`Boolean` 和 `String` 时, 没有写 `new` ,`Number()`、`Boolean()` 和 `String()` 被当做普通函数,把任何类型的数据转换为 `number`、`boolean` 和 `string` 类型(注意不是其包装类型)

  2. 不要使用 `new Number()`、`new Boolean()`、`new String()` 创建包装对象;

  3. 用 `parseInt()` 或 `parseFloat()` 来转换任意类型到 `number`;

  4. 用 `String()` 来转换任意类型到 `string` ,或者直接调用某个对象的 `toString()` 方法;

  5. 通常不必把任意类型转换为 `boolean` 再判断,因为可以直接写 `if (myVar) {...}` ;

  6. `typeof` 操作符可以判断出 `number` 、`boolean`、`string`、`function` 和 `undefined` ;

  7. 判断 `Array` 要使用 `Array.isArray(arr)`;

  8. 判断 `null` 请使用 `myVar === null`;

  9. 判断某个全局变量是否存在用 `typeof window.myVar === 'undefined'`;

  10. 函数内部判断某个变量是否存在用 `typeof myVar === 'undefined'`。

  11. 任何对象都有 `toString()` 方法吗? `null` 和 `undefined` 就没有!

  12. `number` 对象调用 `toString()` 报 `SyntaxError`

web前端/html5学习群:250777811

欢迎关注此公众号→【web前端EDU】跟大佬一起学前端!欢迎大家留言讨论一起转发

 

你不知道的 JavaScript 基础细节的更多相关文章

  1. javascript基础修炼(8)——指向FP世界的箭头函数

    一. 箭头函数 箭头函数是ES6语法中加入的新特性,而它也是许多开发者对ES6仅有的了解,每当面试里被问到关于"ES6里添加了哪些新特性?"这种问题的时候,几乎总是会拿箭头函数来应 ...

  2. javaScript基础之闭包

    不管是Jquery还是EXTJS,现代的js框架中大量应用了js的一些特性,比如:匿名函数,闭包等等,导致源代码非常难以阅读. 不过要想真正的使用好前台的UI技术,还是需要去深入的理解这些概念.   ...

  3. 读书笔记-你不知道的JavaScript(上)

    本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精 ...

  4. 读《你不知道的JavaScript(上卷)》后感-作用域闭包(二)

    github原文 一. 序言 最近我在读一本书:<你不知道的JavaScript>,这书分为上中卷,内容非常丰富,认真细读,能学到非常多JavaScript的知识点,希望广大的前端同胞们, ...

  5. 你不知道的Javascript:有趣的setTimeout

    你不知道的Javascript:有趣的setTimeout 有时候,小小的细节往往隐藏着大大的智慧今天在回顾JavaScript进阶用法的时候,发现一个有趣的问题,话不多说,先上代码: for(var ...

  6. 你不知道的JavaScript之类型

    JavaScript是一门简单易用的语言,应用广泛,同时它的语言机制又十分复杂和微妙,即使经验丰富的开发人员也需要用心学习才能真正掌握. <你不知道的JavaScript>中是这样定义类型 ...

  7. 《你不知道的 JavaScript 上卷》 学习笔记

    第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法 ...

  8. javascript基础修炼(7)——Promise,异步,可靠性

    开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一. 别人是开发者,你也是 Promise技术是[javascript异步编程]这个话题中非常重要的,它一度让我感到熟悉 ...

  9. 《你不知道的JavaScript》系列分享专栏

    <你不知道的JavaScript>系列分享专栏 你不知道的JavaScript”系列就是要让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部 ...

随机推荐

  1. Java 泛型 二

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...

  2. express 热启动 静态文件部署 跨域解决 调试

    1.热启动 每次修改app.js文件,都得重新启动项目,十分不方便.这里可以用hotnode插件实现热启动 安装:$ npm install -g hotnode 启动项目:$ hotnode app ...

  3. 自动化测试(三)如何用python写个双色球

    写一个程序,输入N就产生N条双色球号码 红球  6     01-33 蓝球  1     01-16 产生的双色球号码不能重复,写到一个文件里面,每一行是一条 红球: 01 03 05 07 08  ...

  4. 更改maven本地仓库地址

    1.进入maven安装conf文件中,编辑settings.xml文件,新增图中的圈出的内容(我想要存放的地址是D:\HMY\m2\repository) 2.复制settings.xml文件至D:\ ...

  5. 孤荷凌寒自学python第四十二天python线程控制之Condition对象

     孤荷凌寒自学python第四十二天python的线程同步之Condition对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天学习了Condition对象,发现它综合了Event对象 ...

  6. Android之SQLite总结

    SQLite 是一个轻量级的数据库,常用于各种嵌入式设备当中.android 提供了SQLiteOpenHelper的抽象类用于帮助开发数据库.在实际使用中经常定义一个类继承SQLiteOpenHel ...

  7. [错误解决]pandas DataFrame中经常出现SettingWithCopyWarning

    先从原dataframe取出一个子dataframe,然后再对其中的元素赋值,例如 s = d[d['col_1'] == 0] s.loc[:, 'col_2'] = 1 就会出现报错: Setti ...

  8. Servlet中文件上传

    利用getReader()和getInputstream()上传 package control; import javax.servlet.ServletException; import java ...

  9. iOS runLoop 理解

    目录 概述 run loop modes 一.概述 run loop叫事件处理循环,就是循环地接受各种各样的事件.run loop是oc用来管理线程里异步事件的工具.一个线程通过run loop可以监 ...

  10. 替换localhost:8080(假域名,本地使用)

    1. 更改servers 的端口号为 80 (默认 8080),此时就不用再输入 8080了. 2. 找到 C:\Windows\System32\drivers\etc 下的 hosts 文件,用记 ...