工作了几年,从来没有想过要正经的在公网分享过什么东西,这次趁着北京清新舒服的连雨的天气,听听音乐、好好的理理javascript的基础,也算是对自己的一个总结吧。
JS 是做客户端语言的
可操作网页中元素,也浏览器的一些功能
-
DOM(document object mode):文档对象模型,提供一些js 的属性和方法,用来操作页面中的DOM 元素
-
BOM ( browser object mode ):浏览器对象模型,提供一些js 的属性和方法,用来操作浏览器的
JS 中的变量 variable
创建变量
-
var/let 创建变量
-
const 创建常量
-
function 创建函数
-
class 创建类
-
import 模块导入
// ES3 var a = 12; console.log(a); // ES6 let b = 2; b = 100; const c = 20; c = 300; // 报错 ,const 创建的变量,存储的值不可修改 // 创建函数 也是一个变量 function func () {} // 创建类 也相当于创建 变量 class B {} // ES6 的模块导入也可以创建变量 import Sumber from './summer.js'; // symbol 创建唯一值 let x = Symbol(100); let y = Symbol(200);
JS 命名规范
-
区分大小写
let class = 200; console.log(Class); //---> 无法输出 -
数字、字母、下划线、$ 数字不能作为开头
let $summer; // ---> 用jq 获取的 let _summer; // ---> 公共变量 let 1sumber; // ---> 不可以
驼峰命名法: 首字母小写,其余单词首字母大写
- 常用-增: zdd/insert/create/new
- 常用-修改: update/delete/del/remove/rm
- 常用-查询: sel/select/query/get/
- 信息:info
不能使用关键字和保留字
-
关键字
var let const function class import if else for switch case break continue do while delete new this instanceof typeof -
保留字
boolean float int double long char debugger ...
JS 中常用的数据类型
基本数据类型,也是值数据
-
number 数字和NAN (not a number ,但属于数字类型)
1) NaN与所有值不行等,包括自己,NaN != NaN; 2) isNaN: 非有效数字 true, 有效数字 false; 注:isNaN 首先验证是否为数字类型,不是的话,先Number()转换在验证 3) parseInt/parseFloat( [val], [进制] ):也是转换成数字的方法,对于字符串来说,他是从做到右查找有效数字字符,知道遇到非有效数字字符,停止查找,把当前找到的数字返回 4) == 比较时,可能把其他类型转换成数字 -
string 单引号、双引号、反引号
其他转换当成字符串: 1) [val].toString(); 2) 字符串拼接; -
boolean: true /false
0 \ NaN \ "" \ ''\ null \ undefined 这5个类型转换为false, 其他 为true -
null 空对象指针 : 没有 意料之中
-
undefined 未定义: 没有 意料之外
引用数据类型 :操作的是丢内存的空间地址
-
object 对象数据类型 :
{} 普通对象 {[key]: [value]} 属性名: 属性值不能重复 [] 数组对象 /^$/ 正则对象 math 数学函数对象 日期对象 类数组对象 -
函数数据类型 function
JS 中数据类型检测
-
-
typeof[val]: 用来检测数据类型的运算符
string、 number、 function、 undefined、 boolean typeof null、[]、{}、/^$/、function 都是object 此方法的返回值都是字符串数据类型。 console.log(typeof b=="number");//true console.log(typeof (typeof b));//string
-
-
-
instanceof: 用来检测当前实例是否属于某个类,是ture, fasle
var ary=[]; ary instanceof Array -> true ary instanceof RegExp -> false ary instanceof Object -> true 所有的对象都是Object这个基类的一个实例
-
-
-
constructor: 为实例原型上的方法,指向他的构造函数,constructor可修改,所有一般不用。
console.log(c.constructor === Object);//true console.log(d.constructor === Array);//true console.log(e.constructor === Function);//true console.log(h.constructor === Date);//true console.log(i.constructor === RegExp);//true function A() {} function B() {} A.prototype = new B();//此时将A构造函数的原型指向B构造函数的一个实例。 let obj = new A(); console.log(obj.constructor === A);//false console.log(obj.constructor === B);//true
-
-
-
Object.prototype.toString.call: 检测数据类型最常用
console.log(Object.prototype.toString.call(123)) //[object Number] console.log(Object.prototype.toString.call(null)) //[object Null] console.log(Object.prototype.toString.call({})) //[object Object] console.log(Object.prototype.toString.call(undefined)) //[object Undefined] console.log(Object.prototype.toString.call('123')) //[object String]
-
JS 的操作语句: 判断、循环
判断
- if else
- 三元运算符 a ? b : c
- switch case
- == 和 ===(绝对相等,数据类型相同)
循环
- for
- for in
- for of (ES6)
- while
- do while宋
函数 Function
函数式一个方法或者方法体,函数就是就是把实现某个功能的代码放在一起进行封装,减少代码冗余,提高代码使用率,低耦合高内聚
创建函数————> 形参、返回值
执行函数————> 实参数
创建函数
-
ES5
function [函数名] ([形参1],...) { // 函数体 return [处理后的结果] } [函数名]([实参1],...) function fn(a, b){ return a + b; } -
ES6
[参数] => 函数体 var foo = (a, b) => { return a + b; }
箭头函数与function 函数区别
-
this 指向:箭头函数不变,function 变化
使用function 定义的函数中的this 随着调用环境变化而变化的,使用箭头函数时候this 指向没有变化,指向定义函数的环境 -
构造函数:function 可以定义构造函数,箭头函数不可
-
变量提升
js 的内存机制,function 的级别最高,而用箭头函数定义时,var(let const) 定义变量不能得到提升,所以箭头函数一定要定义调用之前
| 项目 | this | 构造函数 | 变量提升 |
|---|---|---|---|
| function 函数 | 随着调用环境变化 | 可定义构造函数 | 调用无先后顺序 |
| 箭头函数 | this 固定不变,执行定义函数的环境 | 不可定义构造函数 | 变量无法提升,先定义,后调用 |