肉丝姐课程序言
励志成为一位大佬,你给我加把油。
由于课程的难度就摆在那里,也难以下咽。所以制定一个特别简单的计划,每5分钟就总结一次。
郁闷,说的都是中国话,为什么就不理解呢?
JS0601课时①环境的搭建与js简介
肉丝姐姐卡卡的一顿装,对于本人菜鸡来说,属实没必要。各位看官,可以酌情观看安装。
JS0603课时②:基本数据类型(上)
-
00:00–05:00
原始类型:数值,字符串,布尔值
合成类型:对象 (object,array,function)
特殊值:Undefined,null查看类型的运算符
typeof : 可以检查没有声明的变量,不会报错
instanceof
Object.prototype.to.String -
05:00-10:00
null 的类型是object,转换为数值是0
Undefined 的类型是 Undefined,转换为数值是NaN
建议使用null来定义 -
10:00-15:00
转换成布尔值为false的类型有
undefined,null,false,0,NaN,空字符串。infinity
转换成布尔值为True的类型有
空数组 [ ] 空对象 { } 其余全部
js内部,所有数字都是以64位浮点数形式存储,整数也是如此。
由于浮点数不是准确的值。所以涉及到小数的比较和运算要特别小心。 -
15:00-20:00
默认情况下,js内部会把其他进制转变成十进制。
NaN 的数据类型是Number
与任何数运算,得到结果都是NaN。
不等于任何值,包括它本身。
当溢出时,返回infinity -
20:00-25:00
parseInt( ) : 字符串 转换为 整数,从左到右扫描,只认识数字,一旦不是数字,返回NaN
(数字,数字的进制)转为十进制
parseFloat( ):转换成浮点数
is NaN 不等于任何值 (value != value )
is Finite
字符串:单引号里面得是双引号,双引号里面是单引号。 -
25:00-30:00
-
30:00-35:00
对象:键值对,键可以不带冒号。
键不能是数字,数字无法查找。
a={
a:3,
c:4,
}
var b=a; # 表示拷贝
console.log(b.a ) # 3
不同的变量指向同一个指针,修改其中一个变量,就会影响所有变量。
也就说改变b,就会改变.这种情况只局限于对象。
如果两个变量指向同一个原始类型,那就是拷贝。
var a=1;
b=a;
b=3
console.log(a) # 1
- 35:00-40:00
对象属性的查看,console.log(Object.key(对象))
对象的删除:delete a.a 直接删除成功
只能删除自己的属性,不能删除继承的属性
属性是否存在:console.log(“a” in 对象)
console.log(对象.hasOwnProperty(“a”)) - 40:00-45:00
for in 打印所有属性
函数的声明
function(){}
var b = function(){}
var c = new Function("a","b"," return a+b ")# 括号里面进行混淆
console.log(c(1,2))
- 45:00-50:00
函数的属性和方法
funcionb(){
console.log(a);
var a=100;
}
b()
console.log(b.name,b.length,b.toString)
# length 是形参的长度
-
50:00-55:00
函数的作用域
闭包 -
55:00-60:00
arguments对象
不懂,先往下看。 -
作业
不知道说了个啥JS0607课时③基本数据类型(下)
-
00:00–05:00
作业第一题,虽然比较简单,但是我不懂 -
04:36–13:24
作业第二题:简单的补环境
补环境,一直听说过这个操作,但是没有体会过整个操作,听了2遍,大概有点理解了。
主要思想:
运行一遍,把所有报错都补上去,让其输出与浏览器输出保持一致。 -
13:24–20:35
闭包:
函数是内部与外部的桥梁
function f(){
var count=0;
function add(){
count++;
console.log(count);
}
return add
}
var f2 = f()
f2()
f2()
f2()
- 20:36–23:10
立即调用函数表达式
function test(){
console.log("i am test ")
}
第一种
var t = function test(){
console.log("i am test ")
}()
第二种
(function (){
console.log("i am test ")
})()
第三种
(function (){
console.log("i am test ")
}())
目的:不想起函数名,避免污染全局变量。内部形成封闭的作用域。
- 23:10–31:14
eval(字符串) ,执行字符串js代码,并改变当前的作用域的变量
var a = 2
eval("console.log(a);a++")
console.log(a)
2
3
当 eval别名调用,js规定使用全局变量。
node.js不支持别名调用,浏览器中支持
没使用别名调用之前
var a = 2;
(function (){
var a = 3;
eval("console.log(a);a++");
})()
console.log(a)
3
2
使用别名调用之后
var a = 2;
var e = eval;
(function (){
var a = 3;
e("console.log(a);a++");
})()
console.log(a)
2
3
- 31:14–36:45
数组:typeof 数组 是Object
Object.key(数组)返回所有的键名
var array = [1,"asd",true,{},function(){}]
console.log(Object.keys(array))
[ '0', '1', '2', '3', '4' ]
- 33:22–33:22
数组:length操作,可执行删除操作,可数长度
var array = [1,"asd",true,{},function(){}]
console.log(array.length)
array.length = 4;
console.log(array)
5
[ 1, 'asd', true, {} ]
数组:添加操作
注意:可添加为键值对,并且length删不掉
var array = [1,"asd",true,{},function(){}]
array.name123="name123"
console.log(array)
array.length = 0;
console.log(array)
[ 1, 'asd', true, {}, [Function (anonymous)], name123: 'name123' ]
[ name123: 'name123' ]
逆向时候,会有这样的属性藏在其中
- 33:22–36:43
数组的循环
for in
for
while
forEach - 36:43–41:13
数组的空位
var array = [1,"asd",true,{},function(){},,344]
console.log(array)
[ 1, 'asd', true, {}, [Function (anonymous)], <1 empty item>, 344 ]
- 41:13–44:03
类似数组的对象
不懂啥意思
-44:03–54:53
强制类型转换 有三种
Boolean()布尔值的转换最为简单,第二节课有介绍。
Number(),String( )这两个比较麻烦
var obj={}
console.log(Number(obj))
console.log(String(obj))
NaN
[object Object]
为啥会出现这样的结果呢?
obj里面继承了什么,打印出来的这些。
把这两个属性重写,就不会调用继承的属性
var obj={
"toString":function(){
return "obj"
},
"valueOf":function(){
return "123"
},
}
console.log(Number(obj))
123 <返回类型是number>
Number是先找valueOf,如果valueOf为空,就会去找toString。都为对象,就报错。
var obj={
"toString":function(){
return "obj"
},
"valueOf":function(){
return "123"
},
}
console.log(String(obj))
obj
String 先找toString,如果toString为空,会找valueOf。都为对象,就报错。
- 44:03–54:53
错误处理机制
js在解析运行时,一旦发生错误,引擎就会抛出一个错误对象。js原声提供Error构造函数满所有抛出的错误都是构造函数的实例。
一切皆对象
Error 实例对象的属性
message 出错时的提示信息
name 错误名称(非标准属性)
stack 错误的堆栈(非标准属性)
throw :手动中断程序
try catch: 程序不会中断,捕捉异常
finally:不管是否出现错误,都必须在最后运行。 - 54:53–01:04:23
完,撒花
JS0608课时②:JS对象特性详解与Hook
- 00:00-08:47
肉丝课前舞蹈时间 - 08:47-14:59
Object对象
dir(Object)打印出来的prototype方法是实例中可以引用,剩下的是静态方法。
js:基于构造函数,原型链
通过一个构造函数,创建一个实例对象。 - 14:59-20:06
创建对象的方式
var init = function(a){
this.a=a
}
var obj = new init("dta")
console.log(obj) ## 往上回溯是prototype
var obj2 = Object.creat(obj)
console.log(obj2) ## 往上回溯是obj2
- 20:06-20:06
暂停读PPT,理解。
原型对象的属性不是实例对象自身的属性。只要修改原型对象,变动就会立刻体现在所有实例对象上。 (一改则全改)
当实例对象本身没有某个属性和方法时,它就会到原型对象上找到该属性或方法。(实例没有,向上找) - 20:07-25:30
代码实现ppt - 25:31-26:11
原型链:继承关系 - 26:11-35:13
环境监测,重写to.String方法 - 35:13-41:30
Object的静态方法
- 41:35-41:30
重头戏:hook
看到这里的我成功被劝退,实在是听不懂,所以回归基础。
老老实实看基础。
我就是打不死的小强,条条大路通罗马,生撸基础,就不信了怎么可能学不会。