【JavaScript高级01】JavaScript基础深入_javascript 深入-程序员宅基地

技术标签: JavaScript高级  javascript  

1,数据类型

JavaScript将数据分为六大类型,分别为数值类型(number)、字符串类型(string)、布尔类型(boolean)、undefined(定义未赋值)、null(赋值为空值)、应用类型。其中引用类型可分为普通对象,Function、Array。Function,Array都是属于特殊的对象。

typeof可以用来判断一个变量的数据类型:

var a
document.write(typeof a+"____")
var a=12
document.write(typeof a+"____")
a="xiaoshi"
document.write(typeof a+"____")
a=true;
document.write(typeof a+"____")
a=undefined;
document.write(typeof a+"____")
a="";
document.write(typeof a+"____")
a=null;
document.write(typeof a+"____")

以上代码的打印结果为:undefined、number、string、boolean、undefined、object、object。值得注意的是虽然值为null或者为空,但是打印的结果还是一个Object类型。也就是说typeof不可以用于判断null和Object

instanceof用来判断对象的具体类型:

function Fun(){}
var f=new Fun();
var f2=new Fun();
document.write(f instanceof Fun)
document.write(f2 instanceof Fun)
document.write(f instanceof Function)
document.write(f instanceof Object)

以上代码的执行结果为:true、true、false、true。

===用于判断undefined,和null:

 var a=null;
document.write(a===null)

以上代码的执行结果为true。

2,undefined与null

undefined与null的区别在于:undefined表示的是定义未赋值,null表示定义赋值为一个null。

null的作用:初始赋值, 表明将要赋值为对象;结束前, 让对象成为垃圾对象(被垃圾回收器回收)。

3,严格区别变量类型与数据类型
数据的类型:基本类型和对象类型。
变量的类型(变量内存值的类型):基本类型(保存就是基本类型的数据),引用类型(:保存的是地址值)。

4, 数据、内存和变量
存储在内存中代表特定信息的二级制代码.,其特点为可传递, 可运算。
内存是内存条通电后产生的可储存数据的空间(临时的)。内存产生和死亡: 内存条(电路版)==>通电==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失。
a,内存分类。
    栈: 全局变量/局部变量
    堆: 对象
变量是可变化的量, 由变量名和变量值组成,每个变量都对应的一块小内存, 变量名用来查找对应的内存, 变量值就是内存中保存的数据。
内存,数据, 变量三者之间的关系为:内存用来存储数据的空间,变量是内存的标识。

5,有关变量的问题

问题一: var a = xxx, a内存中到底保存的是什么?
    * xxx是基本数据, 保存的就是这个数据
    * xxx是对象, 保存的是对象的地址值
    * xxx是一个变量, 保存的xxx的内存内容(可能是基本数据, 也可能是地址值)

问题二:关于引用变量赋值
  * 2个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据
  * 2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象

问题三:问题: 在js调用函数时传递变量参数时, 是值传递还是引用传递
  * 理解1: 都是值(基本/地址值)传递
  * 理解2: 可能是值传递, 也可能是引用传递(地址值)

问题四:问题: JS引擎如何管理内存?
a,内存生命周期
  * 分配小内存空间, 得到它的使用权
  * 存储数据, 可以反复进行操作
  * 释放小内存空间
b. 释放内存
  * 局部变量: 函数执行完自动释放
  * 对象: 成为垃圾对象==>垃圾回收器回收

5,对象

5.1.什么是对象

对象就是用于保存多个数据的封装体。

5.2.为什么使用对象

统一管理多个数据

5.3.对象的组成
  属性: 属性名(字符串)和属性值(任意)组成
  方法: 一种特别的属性(属性值是函数)

5.4.如何访问对象内部数据?
 方式一:对象.属性名: 编码简单, 有时不能用
方式二: 对象['属性名']: 编码麻烦, 能通用

方式一不能用的情况:属性名包含特殊字符: -或者空格,属性名不确定。

 var p = {}
 p.content-type = 'text/json'

这种方式不可以使用。只能使用第二种方式。

  var p = {}
  p['content-type'] = 'text/json'

同时,在属性名不确定时,使用第二种方式,可以方便获取不同属性的属性名,更加灵活多变。

var p={}
var propName = 'myAge'
var value = 18
p[propName] = value

6,函数

6.1.函数概念

a,什么是函数

实现特定功能的多条语句的封装体,只有函数是可以执行的, 其它类型的数据不能执行。

b,为什么要用函数

提高代码复用.

c,如何调用(执行)函数

  *test(): 直接调用。
  * obj.test(): 通过对象调用。
  * new test(): new调用。
  * test.call/apply(obj): 临时让test成为obj的方法进行调用。

6.2.回调函数

回调函数是指通过某种方式调用的自定义的函数,这个函数是我们自己定义的,但是不是由我们调用,而是在某种场景之下才被调用的。例如一个函数的形参是一个函数时,也被称之为回调函数。

场景的回调函数场景有:

dom事件回调函数 ==>发生事件的dom元素

document.getElementById('btn').onclick = function () { // dom事件回调函数
    alert(this.innerHTML)
  }


  定时器回调函数 ===>window

 setTimeout(function () { // 定时器回调函数
    alert('到点了'+this)
  }, 2000)

ajax请求回调函数
生命周期回调函数

6.3.IIFE(立即执行函数)

立即执行函数是匿名函数调用本身的函数,

a,IIFE的作用

  • 隐藏实现
  • 不会污染外部(全局)命名空间
  • 用它来编码js模块

b,IIFE可以向外提供一个访问函数

(function () {
    var a = 1
    function test () {
      console.log(++a)
    }
    window.$ = function () { // 向外暴露一个全局函数
      return {
        test: test
      }
    }
  })()

  $().test() 

6.4. this是什么?
任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window,所有函数内部都有一个变量this,它的值是调用函数的当前对象。
a. 如何确定this的值?
  * test(): window
  * p.test(): p
  * new test(): 新创建的对象
  * p.call(obj): obj

b,注意:直接调用,this对象是window。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31539817/article/details/108428441

智能推荐

matlab有限域多项式除法_椭圆曲线密码学简介(二):有限域的椭圆曲线及离散对数问题...-程序员宅基地

本文主要翻译自这篇文章译者注★ 本文承接上文所讨论的椭圆曲线,并将曲线的定义域从实数域缩小到了有限域,引出离散对数问题 ”★ 首先介绍了有限域的定义,并给出了一种基于模运算的有限域 ”★ 然后对离散域上的椭圆曲线重新进行群的构建 ”★ 接着介绍了群的阶数的概念,介绍了计算椭圆曲线上的群的阶数的算法,并讨论群和子群的阶数的联系 ”★ 随后展示了如何用椭圆曲线上的任意一点,通过计算点的倍数的..._matlab计算椭圆曲线

论文学习11-Adversarial training for multi-context joint entity and relation extraction(实体关系买抽取模型,对抗学习-程序员宅基地

文章目录1. introduction2.相关工作3.Model3.1 Joint learning as head selection3.2 AT4.实验设置5.结果6.总结实体关系抽取模型对抗学习.论文链接codeBekoulis, G., et al. (2018). “Adversarial training for multi-context joint entity and..._adversarial training for multi-context joint entity a-nd relation extraction

[openjudge-搜索]Lake Counting(翻译及实现)-程序员宅基地

题目原文描述 Due to recent rains, water has pooled in various places in Farmer John’s field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) ...

计算机 在电厂的应用,计算机自动控制系统在火电厂中的应用-程序员宅基地

电力是现代人类文明社会的必需品,而火力发电是电力生产的主要组成部分,火力发电是指使用化石燃料(即煤炭、石油、天然气)通过燃烧释放出热能加热工质,再通过热力原动机驱动发电机的发电方式,原动机主要是锅炉和汽轮机,燃汽轮机或内燃机。中国电力行业截止到2000年底,全国发电装机总容量达31600万千瓦,其中火电装机容量23680万千瓦,占74.94;水电装机容量7680万千瓦,占24.3;核电及其它装机容..._火电厂计算机工作

『C++』关联式容器的简单使用(上)_c++ 关联式容器-程序员宅基地

关联式容器。什么是键值对?map。map的简单介绍。map的简单使用。multimap。multimap的简单介绍。multimap的简单使用。set。set的简单介绍。set的简单使用。multiset。multiset的简单介绍。multiset的简单使用。_c++ 关联式容器

随便推点

怎么用显卡计算_显卡性能的软件 3dmark怎么用-程序员宅基地

3dmark怎么用?3dmark是一款专门为测量显卡性能的软件,也可以作为衡量电脑的性能的一项指标,那我们在下载3dmark软件之后,该怎么测试显卡性能呢,怎么使用,3dmark怎么使用,下面就和小编一起来看看吧!1、打开我们在电脑中下载好的3dmark软件工具,进入到主页之后,设置相关的参数,在【Basic】选项卡中设置预置类型和运行方式;2、然后切换到【Advanced】选项卡,选择..._3dmark怎么测试显卡

vuex存储和本地存储(localstorage、sessionstorage)的区别,总算知道咋用了_seeion与vuex的区别_wkj001的博客-程序员宅基地

1. sessionStoragesessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。  用法:储存: 1. 点(.)运算符 sessionStorage.lastname = ‘JSAnntQ’;2. 方括号([ ])运算符 sessionStorage[‘lastname’] = ‘JSAnntQ’;3. localStorage.setItem    _seeion与vuex的区别

计算机网络(HIT)_中国大学MOOC_第8周作业7_订正_hit计网mooc答案-程序员宅基地

( 10分 )某网络拓扑如图所示,其中路由器内网接口、DHCP服务器、WWW服务器与主机1均采用静态IP地址配置,相关地址信息见图中标注;主机2~主机N通过DHCP服务器动态获取IP地址等配置信息。请回答下列问题。(1)DHCP服务器可为主机2~主机N动态分配IP地址的最大范围是什么?主机2使用DHCP协议获取IP地址的过程中,发送的封装DHCP Discover报文的IP分组的源IP地址和目的IP地址分别是什么?(2)主机2在通过DHCP服务器获取IP地址的同时还可以获取哪些IP地址配_hit计网mooc答案

poj - 1014 - Dividing(多重背包)-程序员宅基地

题意:价值为1,2,3,4,5,6的石子分别有n1,n2,n3,n4,n5,n6个,问能否把石子分成价值相等的两份(石子总个数 题目链接:http://poj.org/problem?id=1014——>>转换为二进制拆分+01背包。。二进制拆分:把第i种石子拆分成ni份,对于每一份,可取可不取,可用01背包,但这样时间开销较大。有这样一个事实:对于一个正整数n,小于等于n的任何一个正

华为BGP路由属性策略实验_华为local-preference配置-程序员宅基地

BGP路由属性策略实验报告1.实验环境实验要求、实现 路径控制 分别使用AS-pathlocprfprefalmed 属性实现选路R1-R2-R4R1-R3_R4实验思路1.先配置好相应的ip地址,loopback 0,ospf,对等体R1配置 配置ip,bgp邻居sy[Huawei]int g0/0/0[Huawei-GigabitEthernet0/0/0]ip add 10.0.12.1 24[Huawei-GigabitEthernet0/0/0]und_华为local-preference配置

eclipse操作HDFS时异常的解决: Permission denied: user=administrator, access=WRITE,-程序员宅基地

在虚拟机上搭建了一个Hadoop的环境(4节点),在用windows上的Java客户端来操作集群中的HDFS文件时出现了如下的认证错误org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/input4":root:...

推荐文章

热门文章

相关标签