- js基础
- 关系运算符
- 逻辑运算符
- 创建对象
- delete关键字
- 循环
- 分支语句
- break和continue
- 调试工具
- console展示对象的时候的问题
- dom操作
- 异常处理
- js不能改文件,是在浏览器中执行的
- js高级讲义
11/24/2016 8:19:01 AM
js基础
- 基本
- 2016.1.2 webstorm版本
- 题目
- js包含三个部分
- ** dom bom ecma**
- ecma :固定了js的语法规范—一般使用的还是ecma3 (现在最新的是6,使用新语法TypeScript处理兼容)
- bom :浏览器对象模型,提供了一套浏览器相关的api
- navigator.userAgent—-通过正则表达式,取值出用户使用的什么浏览器
- location
- location.href = ‘http://waxun.github.io’
- localtion.reload 进行刷新页面
- window
- window.open()
- dom 文档对象模型
- 作用
- 提供了一套操作页面元素的api—application programing interface 就是方法
- 问题
- 没有dom的话怎么操作
- 页面本质返回出来的字符串,用正则了啥的去操作 object
- 没有dom的话怎么操作
- 作用
- ** dom bom ecma**
- js中的数据类型
- 简单(值类型)
- number string boolean undefiend null(???是对象还是啥)
- 复杂(引用)
- 核心类型
- obj、 function
- 复合类型
- Array Date Math(本身就是一个对象,不需要new) RegExp(正则表达式regular expression) Number String Boolean(内置对象)
- 核心类型
- 简单(值类型)
-
获取数据类型 1.** typeof 关键字** 1. 语法 1. typeof 数据 2. 返回值类型 1. 字符串类型 3. typeof 1. 获取不到详细的类型,如果是复杂类型的数据,只能获取到到
- 一个对象的toString() //一个对象的toString方法,返回的是[typeof方法,返回的是[Object]构造函数
- 获取一个数据的详细类型
- Object.prototype.toString 方法可以将对象转成字符串,字符串的格式为[obj 详细类型]
- 先调用 这个芳芳,将对象转换成上面格式的字符串 Object.prototype.toString.call(数据)
- 然后进行字符串的切片,从8开始,到-1结束,就可以获取到详细的类型了
- 代码
- 引用类型和值类形式
- 以后不要说堆和栈的问题
- js运行在浏览器 js引擎(这个是在对和栈里面的)
1.
- 值类型
- 直接存储值类型的数据的就是数据本身的数据就是
- num=10 直接进行开辟一个空间10,名字叫num
- 引用类型
- 数据单独存储,存储的是数的地址的数据就是引用数据的类型
- var obj = {‘name’:’waxun’,’age’:11},右边先开辟一个空间有一个地址0X11 ,左边开辟一个空间(存储一个地址指向0X11)
- 里面再有引用类型,继续重复
- 值类型
- 值类型和引用类型赋值额类型
- 值类型赋值
- 直接将数据复制一份,交给新的变量,新变量和就变量完全独立,互不影响
- 引用类型的赋值
- …疑问??
- car
- 值类型赋值
- 值类型和引用类型作为函数来使用的情况
- 解释
- obj= obj1(隐式的操作 形参 = 实参)
- 可以用值类型和引用类型赋值的特征进行分析
- 因为在函数调用的时候,会将实参赋值给形参,也就是做了隐式转换
- 面试题
- 画图
- 把实参赋值出来一份地址
- 指向的内容是同一个
- 一般都是在函数里面套变量修改,是否会影响外面的对象
- 值类型和引用类型
- 值类型 将原值赋值一份
- 引用类一份 将地址复制一份,修改的是同一块内容
- 解释
- js包含三个部分
- 对象的动态特征
- 概念
- 对象再创建好之后,可以随时的为对象新增成员(属性和方法),这就是对象的动态特性
- 如何给创建的对象进行新增成员
- 下面两种访问对象属性一级成员的方式
- 如果对象有该属性,那么久直接修改
- 如果对象没有就新增该属性
- 方法
- 点语法
- 对象吗.属性名 = 值
- [] 关联数组
- 对象名[属性名]
- 一定要注意: 属性名是字符串
- 点语法
- 下面两种访问对象属性一级成员的方式
- 面试题 1. 在使用{}对象字面字面量进行属性操作的时候,会先调用该对象的toString 2. 注意: 1. 不管对象中有啥属性,toString放啊不会受到影响的,都返回的是[object Object]
- 扩展内容
- 关联数组语法也可以进行调用方法
- 概念
-
全等和==的区别
- ===全等
- 判断 类型还有值 是否相等
- == 相等
- 值判断值是否相等
- 题目
- ===全等
-
in关键字
1.** for in循环终身会用** 1. 功能 1. 遍历执行对象的所有属性 1. for(var key in 对象){} 2. 注意 1. 对象的属性都是字符串类型的,记住 2. 点语法后面的字符,会被原样处理,不会当做变量进行替换 3. 用法 1. for(var key in file) 这个可以进行打印有的方法
- in的第二种用法
- 语法 :
- 属性名 in 对象名
- 功能:
- 判断指定的对象中是否有指定的属性
- 返回值布尔值
- 语法 :
- in的第二种用法
关系运算符
逻辑运算符
-
&& !与或非 - 短路运算(逻辑中断)
- 或
-
表达式1 表达式2 - 如果表达式1位true就返回表达式1,如果表达式1位false就返回表达式2
-
【】 ‘abc’ ,返回[] 直接进行转换布尔值了,没有toString
-
- 与中断
- 表达式1&&表达式2
- 如果表达式1位fasle,就返回表达式1;
- 或
创建对象
- NEW 关键字
delete关键字
- delete关键字 意思是删除
- 作用
- 删除未使用var声明的变量
- 语法: delete 变量名
- 返回值
- 布尔值 成功与否
- 删除对象的属性
- delete obj.name
- 删除数组
- 可以进行删除,但是length不会变
- arr[0] 是undefiend
- 注意:
- 如果访问一个不存在的变量,会报错
- 如果访问一个obj的不存在的属性,会undefiend
- 返回值
- u可靠,删除系统内置的属性的时候,有可能删除不成功,但是却返回true….
- 如果使用delete关键字操作数组
- 那么会将指定位置的元素改为undefiend 其他元素的索引不会变化
- 如果使用in关键字来操作数组
- 判断的是指定的索引是不是存在于数组中,而不是数据
- 判断一个值是否在数组中,用indexof,返回的是索引值;没有的话返回-1
- 伪数组
- 用对象去模拟的数组,可以进行遍历,也可以用数组的语法去访问属性
- 但是不能使用数组特有的方法
- 也可以用for in
- 删除未使用var声明的变量
11/24/2016 2:21:33 PM
- null
- 用typeof 去判断 是object 是复杂数据类型
- 用存储方式 是简单的数据类型 null==undefiend true
循环
- for
- whiledo
- while
- for in
分支语句
- if else
- switch
break和continue
- break
- 跳出整个循环,继续执行循环下面的语句
- continue
- 跳出本次循环,继续执行下次循环
- 求出1-100之间的偶数和
调试工具
- 打开方式
- ctrl+shift+i
- ctrl+shift+j
- f12
- 作用
- css 调试
- 箭头选中某个元素
- 右边显示的样式
- computed
- 是计算后的盒模型
- console控制台
- 打印
- 可以写js代码
- 与当前页面提供的是同一个运行环境
- 作用
- 可以将代码中的变量在console进行打印 a
- 操作dom元素
- document.getElementById(‘box’).innerHTML=’我是在控制台进行操作页面dom元素的’;
- 调用一个函数test()
- 没有return的的话,直接进行返回一个undefiend;
- 写return的话,进行返回值输出在控制台
- 刷红包
- 写个定时器
- 作用
- 与当前页面提供的是同一个运行环境
- js调错
- pause on exception (在异常的地方进行暂停)
- 双击行数,进行加断点
- 颜色 浅蓝色: 非活跃状态; 深蓝色 活跃状态
- f8
- f10 逐步执行,直接将循环执行完成,在方法外面执行–执行完,不进到方法里面
- f11 into函数内
- shift+f11 跳出函数体
- 第二种断点
- add 条件断点
- 一般用在循环里面
- wathch
- 可以监视变量的变化
- 和看document
- 可以看到dom结构
- call stack
- 函数的调用栈
- scope
- 作用域
- 断点
- 处于激活或是非激活状态
- network
- 状态码
- network
- 网络状态
- 模拟用户网络状态
- manifast… 是什么东西 –h5的离线缓存什么的
- timing是什么东西?
- css 调试
console展示对象的时候的问题
- 点开的一瞬间将值进行改完了
- 值类型拿到的是原值, 引用类型拿到的是地址
- … 看下子
dom操作
- 增删改查
- 增加
- createElement
- innerHTML
- appendChild
- 删除
- removeChild
- 改
- innerText
- innerHtML
- className
- document.setAttribute
- 查
- getId
- sByTagName
- getElementsByClassNmae
- querySelect
- querySelectAll
异常处理
- 异常
- 最大的特征
- 一旦报错,后面的代码,将不会再执行
- 最大的特征
-
try catch finally
try{ //放入可能出现异常的代码 //Uncaught ReferenceError: a is not defined(…) console.log(a); //后面的代码不会被执行 console.log(typeof a); }catch(e){ //e就是异常信息 console.log(e); }
- 注意
- js分为–预解析和执行阶段
- 语法错误异常,会在预解析阶段就找到,不会执行代码
- 所以try 不会捕获到语法异常
- 用在那
- 出错的代码后面的代码是不会继续执行的,直接回跳到catch中去执行
- try catch 语句捕获异常后,try catch后面的代码是可以正常执行的
- try catch 的完整模式
- try 可能会出现异常的代码
- catch 储蓄哦之后的处理代码
- finally 无论是否出错,都会执行的代码
- 释放资源(js中很少使用)
- 自定义错误信息
- throw 关键字可以抛出异常信息
- 手动抛出异常
- throw ‘信息’
- 抛出的异常是什么木,捕获的异常就是什么
- 什么时候使用
- 在别人调用的时候,需要传参数而且并没有传参数,给调用的方法抛出异常
-
代码
//throw 完了,后面的代码就不会被执行 function test(name){ if(!name){ throw '没有进行传参数'; } alert(1);//没有被执行,因为throw的 console.log(name+'-----hi---'); } //没有进行传参数 //调用结束后进行的打印 没有进行传参数 try{ test(); }catch(e){ console.log(e); }
- 补充
-
js不能改文件,是在浏览器中执行的
-
js高级讲义
概念面试题
- 面向过程的思想
- 步骤的完成方式
- 面向对象的基本概念
- 将解决问题的关注点,放到解决问题所需要的一系列对象身上
-
面向对象其实就是对面向过程的封装
- 什么是对象
- js中,什么是对象
- 无序键值对的集合 首字母排序
- 特征
- 行为
- js中,什么是对象
- 如何将现实生活中的对象用js对象模拟出来
- 对应关系:
- 直接用js中的对象的属性来对应显示生活中对象的特征
- 用方法来对应行为
- code
- 写一个对象
- 小明在gjc上领着一只叼着香肠的dog
- 对应关系:
- 20面向对象的编程的实例
- 步骤3步
- jq一步完成
面向对象的三大特性
- 封装
- 将属性和方法封装成一个对象,实现一系列的功能,只需要对外界暴露一些接口,外界在使用对象的时候,不需要关心内部的实现
- Math.sin()
- 继承
- 现实中的
- 在js中,一个对象没有一些属性和方法,另外一个对象有,拿过来用
- 实现方式
- 实现继承的最简单的形式
- 混入时 继承(for-in)
- 实现继承的最简单的形式
- 多态
- js中不支持多态
- 父类指针指向子类对象(类)java中的
- …
js高级第一天
js基础
数据类型
简单数据类型
- string number boolean undefiedn
复杂数据类型
- Array
- Date
- Math
- Reg
- Num
- Str
- Bool
- Obj
- funtion(){}
- null
- 变量的值永远不可能自动为null,除非手动设置
- 什么时候要将一个变量设置为null
- 自己在写方法给别人提供对象的时候,如果返回的对象不存在或者不出现异常,那么这个返回值,那么这个值设置为null
- 没有获取到getElementById(‘’)
获取类型的关键字
—js typeof 数据 ..返回值为字符串类型的 //功能: 获取数据的数据类型 如果是复杂类型….
11/24/2016 6:42:40 PM