js基础知识点

一、函数立即执行和自执行
立即执行
在声明类似function foo(){}或var foo = function(){}函数的时候,通过在后面加个括号就可以实现自执行
代码:

foo()

(function foo (){
  cosnole.log('我是一个可以自动执行的函数')
}())  推荐使用
(function foo(){})()    //这样写也是可以的
//错误写法
function foo(){
  console.log('直接+()这样会报错的,需要在整个函数外加括号')
}

自执行:

//自执行  函数内部执行自身  递归
function foo() { foo(); } 

二、js的原始类型
1.null 对象类型
2.undefined
3.string
4.number
5.boolean
6.symbom
原始类型是不可以toString() 的
string和String是不一样的类型

        "1".toString()
        console.log("1".toString())
        console.log(typeof String)
        console.log(typeof string)
        console.log(typeof "string")

这个时候的“”1“”是String类型对象类型,可以调用toString
必要的时候会强转类型。

原始类型有一些坑,number是浮点类型

 console.log(0.1+0.2!==0.3)//输出结果是true

null是对象类型 当输出类型的时候,会输出object

console.log(typeof null)

这是js存在的一个悠久的bug。在js的最初版本中使用的是32位系统,为了性能考虑使用地位存储变量的类型信息,000开头代表是对象,然而null,表示为全零,所以将他错误判断为object。现在内部类型判断代码已经改变了,但是对于这个bug确实一直流传下来了

对象类型:

涉及面试题:对象类型和原始类型的不同之处?函数参数是对象会发生什么问题?
答:对象类型存储的是地址(指针)原始类型存储的是值。
当你创建一个对象类型的时候,计算机会在内存中开辟一个空间来存放值,我们找到这个空间,需要一个地址(指针)
数组是一个对象类型

const a=[]
const b=a
b.push(1)
console.log(a)  //输出[1]
console.log(b)  //输出[1]

数组(对象类型)赋值的时候,赋值的不是值,是指针,当a放生变化的时候,b的值就会发生变化

函数参数为一个对象的时候

 function test(person){
            person.age=26
            person={
                name:'yyy',
                age:30
            }
            return person
           }
           const p1={
            name:'yck',
            age:25
           }
           const p2=test(p1)
           console.log(p2)
           console.log(p1)

输出

image.png

解析:传进函数的person是一个副本,指向的内存地址相同,当改变具体的属性的时候,p1中的属性也会改变,当person={} 这个时候意义就不同了重新定义了一个对象,重新开了一个对象,地址不再是p1了,所以p1和p2的值不相同了
三、typeof vs instanceof
涉及面试题:typeof 是否能正确判断类型?
instanceof 能正确判断对象的原理是什么?
答:typeof不能准确判断变量到底是什么类型?
解析:typeof对于原始类型来说,除了null都可以显示正确的类型输出null为对象类型,typeof对于对象来说,除了函数都会显示object。[] {} 判断出来的都是object

 console.log(typeof "1")   //string
        console.log(typeof 1)      //number
        console.log(typeof true)    //boolean
        console.log(typeof  undefined)      //undefined    
      // 可以进行判断变量是否存在  if判断  if(typeof a!=undefined){ console.log('成功')}    如果没有定义的    //变量 if(a){}  会报错
        console.log(typeof null)            //object
        console.log(typeof Symbol())        //symbol
        console.log(typeof [])              //object
        console.log(typeof {})              //object
        console.log(typeof console.log)     //function

所以如果想判断一个对象的正确类型,可以考虑instanceof
instanceof 内部机制是通过原型链判断的。instanceof运算符用来测试一个对象在其原型链这种是否存在一个构造函数 prototype属性
语法:object instanceof constructor
参考:object (要检测的对象) constructor (某个构造函数)
描述:instanceof 运算符用来检测 construtor.prototype 是否存在于参数object的原型链上

function C(){}
     var a=new C()
     console.log(a instanceof C)
     console.log(a)
     console.log(a  instanceof Object)

//输出结果

image.png

更多分解:https://www.cnblogs.com/Trr-984688199/p/6180040.html
instanceof 也不是百分百相信的

this instanceof Vue
通过this判断当前是否事Vue类型,是否new 了VUE
三、箭头函数中的this
箭头函数本来是没有this,她的this的指向是包裹这个箭头函数的第一个普通的函数
例如:

function Counter() {
  this.num = 0;
  this.timer = setInterval(() => {
    this.num++;
    console.log(this.num);
  }, 1000);
}
var b = new Counter();
// 1
// 2
// 3
// ...

普通函数 这个时候的this指向的window

function Counter() {
  this.num = 0;
  this.timer = setInterval(function add() {
    this.num++;
    console.log(this.num);
  }, 1000);
}
var b = new Counter();
// NaN
// NaN
// NaN
// ...

返回到上页面,并刷新

window.location.href=document.referrer;  返回到上衣页面并刷新

堆栈概念

setTimeout(()=>{},0)  也会后执行,放入消息队列中
事件循环会先调用堆栈中的内容,堆栈中没有了,才会处理消息队列中的内容

堆栈的区别
栈只是存放的变量 堆存放的是具体的值
如果是对象,栈中存放对象指针,堆中存放具体的对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容