文章目录
typeof 返回数据类型的字符串表达
var b1 = {
b2:[1,'abc',console.log],
b3:function(){
console.log('b3')
return function(){
return 'xfzhang'
}
}
}
console.log(typeof b1.b2)//'object'
instanceof
===
1、underfine与null的区别
2、 什么时候给变量赋值为null呢?
3、严格区别变量类型与数据类型
数据类型
变量的类型(变量内存值的类型)
内存条通电后产生的可存储数据的空间(临时的)
内存的产生和死亡:内存条==>通电==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失
一块小内存的2个数据
内存分类
var obj1 = {name:'Tom'}
var obj2 = obj1;
function fn1(obj) {
obj.name = 'A';
}
fn1(obj1)
console.log(obj2.name)//A
function fn2(obj) {
obj = {name: 'B'}
}
fn2(obj1)
console.log(obj1.name) //A
1、内存生命周期
2、释放内存
var a = 3
var obj = {}
function fn() {
var b = {}
}
fn()//b是自动释放,b所指向的对象是在后面的某个时刻由垃圾回收器回收
1、属性名包含特殊字符: - 空格
2、属性值不确定
var p = {}
//1、给p对象添加一个属性:content type: text/json
//p.content-type = 'text/json' //不能用
p['content-type'] = 'text/json'
var propName = 'myAge'
var value = 18
//p.propName = value //不能用
p[propName] = value
console.log(p[propName])
提高代码复用
便于阅读交流
//1.函数声明
function fn1() {
console.log(1)
}
//2.表达式
fn2 = function() {
console.log(2)
}
var obj = {}
function test(){
this.xxx="atguigu"
}
//obj.test() 不能直接调用
test.call(obj) //相当于obj.test()
console.log(obj.xxx) // atguigu
(function () { //匿名函数调用
var a = 3
console.log(a + 3)
})()
var a = 4
console.log(a)
;(function () {
var a = 1
function test () {
console.log(++a)
}
window.$ = function () { //向外暴露一个全局函数
return {
test:test
}
}
})()
$.test() //1. $是一个函数 2.$执行后返回的是一个对象
//6
//4
//2
function Person(color) {
console.log(this)
this.color = color;
this.getColor = function () {
console.log(this)
return this.color
};
this.setColor = function () {
console.log(this)
return this.color
};
}
Person("red"); //this是谁? window
var p = new Person("yello"); //this是谁? p
p.getColor(); //this是谁? p
var obj = {};
p.serColor.call(obj,"black"); //this是谁? obj
var test = p.setColor;
test(); //this是谁? window
function fn1() {
function fn2() {
console.log(this);
}
fn2();//this是谁? window
}
fn1;
//每个函数都有一个prototype属性,它默认指向一个Object空对象(原型对象)
console.log(Data.prototype, typeof Date.prototype) //... object
function Fun {}
console.log(Fun.prototype) //默认指向一个Object空对象
//原型对象中由一个属性constructor,它指向函数对象
console.log(Fun.prototype.constructor === Fun) //true
console.log(Date.prototype.constructor === Date) //true
//给原型对象添加属性(一般是方法) ===> 实例对象可以访问
Fun.prototype.test = function() {
console.log('test()')
}
var fun = new Fun()
fun.test() //test()

function Fn() {
//内部语句:this.prototype = {}
}
//1、每个函数function都有一个prototype,即显示原型(属性)默认指向一个空的Object对象
console.log(Fn.prototype)
//2、每个实例对象都有一个__ proto__,可称为隐式原型(属性)
//创造实例对象
var fn = new Fn() //内部语句:this.__proto__ = Fn.prototype
//3、对象的隐式原型的值为其对应构造函数的显式原型的值
console.log(fn.__proto__ == Fn.prototype) // true
//给原型添加方法
Fn.prototype.test = function() {
console.log('test()')
}
fn.test() // test()

function Fn() {
this.test1 = function() {
console.log('test1()')
}
}
Fn.prototype.test2 = function() {
console.log('test1()')
}
var fn = new Fn()
fn.test1()
fn.test2()
console.log(fn.toString())
fn.test3() //报错


//1.函数的显示原型指向的对象默认时空Object实例对象(但Object不满足)
console.log(Fn.prototype instanceof Object) //true
console.log(Object.prototype instanceof Object) // false
console.log(Function.prototype instanceof Object) // true
//2.所有函数都是Function的实例(包含Function)
console.log(Function.__protp__ === Function.prototype) // true
//3.Object的原型对象是原型链尽头
console.log(Object.prototype.__proto__) //null
function Fn() {}
Fn.prototype.a = 'xxx'
var fn1 = new Fn()
console.log(fn1.a, fn1) // xxx
var fn2 = new Fn()
fn2.a = 'yyy'
console.log(fn1.a,fn2.a,fn2) // xxx yyy
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.setName = function(name) {
this.name = name
}
var p1 = new Person('Tom', 12)
p1.setName('Bob')
console.log(p1) //Bob 12
var p2 = new Person('jack', 12)
p2.setName('Cat')
console.log(p2) // Cat 12
console.log(p1.__proto__ == p2.__proto__) // true 实例对象的隐式原型对象指向构造函数的显示原型对象
function Foo() {}
var f1 = new Foo()
console.log(f1 instanceof Foo) //true
console.log(f1 instanceof Obeject) // true
console.log(Object instanceof Function) //true
console.log(Object instanceof Object) //true
console.log(Function instanceof Function) //true
console.log(Function instanceof Object) //true
function Foo(){}
console.log(Object instaenceof Foo) //false
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-968lJYs1-1650793106729)(C:\Users\hello world\AppData\Roaming\Typora\typora-user-images\1643304158857.png)]
//测试1
function A(){}
A.prototype.n = 1
var b = new A()
A.prototype = {
n: 2,
m: 3
}
var c = new A()
console.log(b.n, b.m, c.n, c.m) // 1 undenfine 2 3
//测试2
var F = function() {}
Object.prototype.a = function() {
console.log('a()')
}
Function.prototype.b = function() {
console.log('b()')
}
var f = new F()
f.a() //a()
f.b() //报错
F.a() //a()
F.b() //b()
var a = 3
function fn1() {
console.log(a)
var a = 4
}
fn1() //undenfine 变量提升,fn1函数相当于 var a; console.log(a); a = 4
console.log(b) //undefined 变量提升
var b = 3
fn2() //可调用 函数提升
function fn2() {
console.log('fn2()')
}
fn3() //不能 变量提升
var fn3 = function(){}
//1.进入全局执行上下文
var a = 10
var bar = function (x) {
var b = 5
//3.进入foo函数执行上下文
foo(x + b)
}
var foo = function (y) {
var c== 5
console.log(a + c + y)
}
//2.进入bar函数执行上下文
bar(10)
console.log('gb: '+i)
var i = 1
foo(1)
function foo(i) {
if(i == 4) {
return
}
console.log('fb: ' + i)
foo(i + 1)
console.log('fe: ' + i)
}
console.log('ge: ' + i)
//gb: undefine
//fb: 1
//fb: 2
//fb: 3
//fe: 3
//fe: 2
//fe: 1
//ge: 4
//执行上下文5个
//测试题1
function a() {}
var a;
console.log(typeof a)
//测试题2
if(!(b in window)) {
var b = 1
}
console.log(b) //undefine
//测试题3
var c = 1
function c(c) {
console.log(c)
var c = 3
}
c(2) //报错,c不是一个函数
//其实代码相当于
var c
function c(c) {
console.log(c)
var c = 3
}
c = 1
c(2)
var x = 10
function fn() {
console.log(x)
}
function show(f) {
var x = 20
f()
}
show(fn)//10
var fn = function() {
console.log(fn)
}
fn() //输出函数
var obj = {
fn2: function() {
console.log(fn2) // 报错
console.log(this.fn2) //正常输出函数
}
}
obj.fn2()
function fn1() {
var a = 2
var b = 'abc'
function fn2() { //执行函数定义就会产生闭包(不用调用内部函数)
console.log(a)
}
fn2()
}
fn1() //需要调用外部函数
//1.将函数作为另一个函数的返回值
function fn1() {
var a = 2
function fn2() {
a++
console.log(a)
}
return fn2
}
var f = fn1() //执行外部函数
f() //3 执行内部函数
f() //4 执行内部函数
//2.将函数作为实参传递给另一个函数调用
function showDelay(msg, time) {
setTimeout(function() {
alert(msg)
},time)
}
showDelay('atguigu',2000)
问题:
//1.将函数作为另一个函数的返回值
function fn1() {
var a = 2
function fn2() {
a++
console.log(a)
}
return fn2
}
var f = fn1() //执行外部函数 指向fn2,导致fn2不释放
f() //3 执行内部函数
f() //4 执行内部函数
function fn1() {
//此时闭包就已经产生了(函数提升,内部函数对象已经创建了)
var a = 2
function fn2() {
a++
console.log(a)
}
//var fn2 = function () {
// a++
// console.log(a)
//} 闭包在此句完成才产生
return fn2
}
var f = fn1() //执行外部函数 指向fn2,导致fn2不释放
f() //3 执行内部函数
f() //4 执行内部函数
f = null // 闭包死亡(包含闭包的函数对象成为垃圾对象)
function myModule() {
//私有数据
var msg = 'My atguigu'
//操作数据的函数
function doSomething() {
console.log('doSomething()' + msg.toUpperCase)
}
function doOtherting() {
console.log('doOtherting()' + msg.toLowerCase)
}
//向外暴露对象(给外部使用的方法)
return {
doSomething: doSomething,
doOtherthing:doOtherting
}
}
//
var module = myModule()
module.doSomething()
module.doOtherthing()
(function(window) {
//私有数据
var msg = 'My atguigu'
//操作数据的函数
function doSomething() {
console.log('doSomething()' + msg.toUpperCase)
}
function doOtherting() {
console.log('doOtherting()' + msg.toLowerCase)
}
//向外暴露对象(给外部使用的方法)
window.myModule = {
doSomething: doSomething,
doOtherthing:doOtherting
}
})(window)
myModule.doSomething()
mymodule.doOtherthing()
function fn1(){
var arr = new Array[10000]
function fn2() {
console.log(arr.length)
}
return fn2
}
var f = fn1()
f()
f = null//让内部函数成为垃圾对象 -->回收闭包
//意外的全局变量
function fn1() {
a = new Array(1000)
}
//没有及时清理的计时器或回调函数
var intervalId = setInterval(function(){ //启动循环定时器后不清理
console.log('------')
},1000)
//clearInterval(intervalId)
//闭包
function fn1() {
var a = 1;
function fn2() {
a++
console.log(a)
}
return fn2
}
var f = fn1()
f()
//f = null
var name1 = "the window"
var object1 = {
name1: "my Object"
getNameFunc: function() {
//没有闭包
return function() {
return this.name
}
}
}
console.log(object1.getNameFunc()()) //the window
var name2 = "the window"
var object1 = {
name2: "my Object"
getNameFunc: function() {
var that = this // 闭包
return function() {
return that.name2
}
}
}
console.log(object2.getNameFunc()()) //my object
function fun(n,o) {
console.log(o)
return {
fun: function(m){
return fun(m,n) //
}
}
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3) //undefine 0 0 0
var b = fun(0).fun(1).fun(2).fun(3); //undefine 0 1 2
var c = fun(0).fun(1); c.fun(2); c.fun(3); //undefine 0 1 1
var p = new Object()
p.name = 'Tom'
p.age = 12
p.setName = function(name) {
this.name = name
}
var p = {
name: 'Tom',
age: 12,
setName: function(name) {
this.name = name
}
}
function createPerson(name,age) {
var obj = {
name: name,
age: age,
setName: function(name) {
this.name = name
}
}
return obj
}
//创建
var p1 = createPerson('Tome',12)
var p1 = createPerson('BOb',12)
function Person(name,age) {
this.name = name
this.age = age
this.setName = function(name) {
this.name = name
}
}
function Student(name,age) {
this.name = name
this.age = age
this.setName = function(name) {
this.name = name
}
}
var p = new Person('Tom',12)
var s = new Student('Jack',12)
console.log(p instanceof Person) // true
console.log(s instanceof Student) // true
//父类型
function Supper() {
this.supProp = 'Supper property'
}
Supper.prototype.showSupperProp = function() {
console.log(this.supProp)
}
//子类型
function Sub() {
this.supProp = 'Sub property'
}
//子类型的原型为父类的一个实例对象
Sub.proeotype = new Supper()
//让子类型的原型的constructor指向SUb
Sub.proeotype.constructor = Sub
Sub.prototype.showSubProp = function() {
console.log(this.supProp)
}
var sub = new Sub()
sub.showSupperProp() //Supper property'

function Person(name, age) {
this.name = name
this.age = age
}
function Student(name, age, price) {
Person.call(this,name, age) //相当于:this.Preson(name, age)
this.price = price
}
var s = new Student('Jack', 12, 14000)
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.setName = function (name) {
this.name = name
}
function Student(name, age, price) {
Person.call(this,name, age) //为了得到属性
this.price = price
}
Student.prototype = new Person() //为了看见父类型的方法
Student.prototype.constructor = Student //修正constructor属性
Student.prototype.setPrice = {
this.price = price
}
var s = new Student('Jack', 12, 14000)

有的单线程有的多线程
支持浏览器运行的最核心的程序

我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a
可能已经问过了,但我找不到它。这里有2个常见的情况(对我来说,在编程Rails时......)用ruby编写是令人沮丧的:"astring".match(/abc(.+)abc/)[1]在这种情况下,我得到一个错误,因为字符串不匹配,因此在nil上调用[]运算符。我想找到的是比以下内容更好的替代方法:temp="astring".match(/abc(.+)abc/);temp.nil??nil:temp[1]简而言之,如果不匹配,则简单地返回nil而不会出错第二种情况是这样的:var=something.very.long.and.tedious.to.writevar=some
我正在学习Ruby的基础知识(刚刚开始),我遇到了Hash.[]method.它被引入a=["foo",1,"bar",2]=>["foo",1,"bar",2]Hash[*a]=>{"foo"=>1,"bar"=>2}稍加思索,我发现Hash[*a]等同于Hash.[](*a)或Hash.[]*一个。我的问题是为什么会这样。是什么让您将*a放在方括号内,是否有某种规则可以在何时何地使用“it”?编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果[]是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法Foo.d
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal