js基础 - 变量

*大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源、书籍、课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量类型来说一说js

变量类型*

js变量类型分为基本类型(或者叫值类型)和引用类型。值类型包括Number、Boolean、String、undefined、 null、Symbol (ES6 新增)。 引用类型包括Object 、Array、Function、Date、RegExp,值类型存放在栈内存中,引用类型的数据是存放在堆内存中。

值类型的数据在复制的时候会在栈内存中新建一个新的存储区域用来存储新的变量,和之前的值没有任何关系。比如如下例子:

var a = 'a'
var b = a
b = 'b'
console.log(a) // 'a'

当b的值改变的时候,a的值不会跟着改变。这个很简单,大家也都能理解。

下面说一下引用类型,定义一个对象的时候会在栈内存中存储了一个指针,该指针指向堆内存中该对象的存储地址,当复制这个对象赋值给另一个对象的时候,只是把该对象的指针地址赋值给了另一个对象变量,他们都指向同一个对象,所以当一个值改变的时候,另一个值会跟着改变,看下面的例子就会明白:

var obj1 = {name:'obj1'}
var obj2 = obj1
obj2.name = 'obj2'
console.log(obj1.name) // 'obj2'

大家可以执行一下上面的代码,打印obj1.name的时候输出'obj2',这就是因为对象是引用类型的变量。

JavaScript内置函数和对象

js中内置了一些函数和对象,很多语言都会有内置的方法,直接可以调用开发。
根据ECMAscript(javascript语法标准)提供的内置函数包括Object、Array、Boolean、Number、String、Function、Date、Regexp和Error。内置对象包括Math和JSON。

注意:javascript基础语法提供的内置函数和方法只有这些,像Window、Navigator那是浏览器提供给我们的。还有一点前面的集中都是内置函数而不是内置对象,最后的Math和JSON是内置对象,这个在我们以后的章节讲原型链的时候就明白了,这里先记住就OK了。

几个常见问题

何时使用使用==何时使用===

这个问题大家应该都不陌生,在开发或者面试中会经常碰见的问题。那么答案到底是什么呢?
首先看到这个问题的时候先不要去想到底那些情况使用==那些情况使用===,我们应该首先去想这个问题背后涉及到那些知识点。很显然,这里考的就是强制类型转换,在使用==得时候会强制类型转换,而使用===的时候不会发生强制类型转换。强制类型转换大家应该都知道。下面我们总结一下:
在if()条件判断中0、""、NaN、null、undefined、false都会转为false,判断对象的一个属性存在可以使用如下语法:

var obj = {}
if(obj.name == null){...} // 相当于obj.name === null || obj.name === undefined
/* 该方法只适用于判断对象的属性,不能用于直接判断变量是否存在 */
if(someVal){...} // 这里浏览器会报错

标准答案是:只有在判断一个对象的属性是否存在的时候使用==,其他都使用===。

typeof能否准确判断变量类型

这里首先想到的是对typeof和变量类型的理解,由于typeof只能区分基本类型的变量,所以不能准确的判断变量类型。

Undefined  -- Undefined
Boolean -- Boolean
Number -- Number
String -- String ----------
Object -- Object
Function -- Function
Array -- Object
null -- Object

所以答案是typeof只能判断值类型的变量,不能判断引用类型的变量,要想准确判断变量的类型,可以在以后的原型的章节中介绍

Js基础知识(一) - 变量的更多相关文章

  1. js基础知识:变量

    一.什么是变量? 在JavaScript中,变量用来存放值的,存放任何数据类型的值都可以,它就是值的容器. 二.变量怎么用? (一)用var声明1个变量 在使用变量之前,需要var关键字来声明变量,变 ...

  2. NodeJs>------->>第三章:Node.js基础知识

    第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info  方法 console.log(" node app1.js 1> ...

  3. [JS复习] JS 基础知识

    项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display  :inline or bloc ...

  4. HTML+CSS+JS基础知识

    HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...

  5. Node.js基础知识

    Node.js入门   Node.js     Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...

  6. 网站开发进阶(十五)JS基础知识充电站

    JS基础知识充电站 1.javascript alert弹出对话框时确定和取消两个按钮返回值? 用的不是alert对话框,是confirm confirm(str); 参数str:你要说的话或问题: ...

  7. JS基础知识笔记

    2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...

  8. js基础知识温习:Javascript中如何模拟私有方法

    本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...

  9. shell脚本基础知识以及变量

    一.基础知识 1.shell脚本的格式注意事项 第一行(一般必须写明):指定脚本使用的shell(若不写明也不影响脚本的执行,系统会自动以sh解析脚本)."#!/bin/bash" ...

随机推荐

  1. 在Windows下安装BIND作为DNS服务器(模拟网站比较有用)

    本文参考了CU下的一篇帖子,感谢:) 1.下载BIND http://ftp.isc.org/isc/bind9/9.4.3/BIND9.4.3.zip 2.安装    下载回来是zip的压缩包,解压 ...

  2. Azure中配置和发布 Nginx docker到互联网

    当Azure build一个Niginx docker 镜像时,无法通过浏览器访问这个镜像,于是想到了把这个网站发布到互联网中,这样就能验证网站是否正确. 本问跳过如何创建Azure Ubantu的虚 ...

  3. spring boot JPA 数据库连接池释放

    当JPA获取数据库数据连接时,如果连接数超过最大连接数的配置,系统就会报错: Unable to acquire JDBC Connection 和: Caused by: java.sql.SQLT ...

  4. Pornhub Web 开发者访谈

    原文:Interview with a Pornhub Web Developer 译者:neal1991 welcome to star my articles-translator, provid ...

  5. countUp.js-数字滚动效果(简单基础使用)

    最近写了个移动端宣传页,里面有数字的效果,所以有使用到countUp.js. 以下内容有包括:h5页面countUp.js的引入和实例.参数说明.事件简单使用和描述.countUp.js源代码. 附上 ...

  6. js单选和全选

    列子: //拿到选中的单选框 一.var objs = $(".detail") for(var obj in objs){ var isCheck = obj.is(':chec ...

  7. FastDFS整合Nginx的模块:fastdfs-nginx-module报错:fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录

    错误提示: /usr/include/fastdfs/fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录 [解决办法] 1.编辑fastdfs-ng ...

  8. 关于select的取值

    这篇博客,主要是记录我我所犯的错误,或者自己的写法不规范导致了错误,大家可以引以引以为鉴. 我要获取select当前的值,在IE9上我可以直接写document.getElementById(&quo ...

  9. 第二篇.2、python基础之字符编码

    一 了解字符编码的知识储备 一 计算机基础知识 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的 ...

  10. python文件操作-1.将PDF转成Excel

    # https://www.jianshu.com/p/f33233e4c712 import pdfplumber # 为了操作PDF from openpyxl import Workbook w ...