js之传值与传址/undefined和null/严格模式

LinMeng 等级 722 0 0
传值与传址

基本数据类型有五种---Undefined、Null、Boolean、Number和String 引用数据类型有两种----object,array,fn

  • 两种数据类型的区别:
    1. 存储位置不同 原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中; 引用数据类型直接存储在堆中,占据空间大,大小不固定,如果存储在栈中,将会影响程序运行的性能,引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后,从堆中获得实体。
  1. 传值方式不同 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参; 按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

说的简单点,就是

  1. 基本类型复制是值的复制,互相不受影响。下例中将a变量的值赋值给b变量后,因为基本类型变量是独立的所以a的改变不会影响b变量的值。
    let a = 100;
    let b = a;
    a = 200;
    console.log(b);   //100
  2. 对于引用类型来讲,变量保存的是引用对象的指针。变量间赋值时其实赋值是变量的指针,这样多个变量就引用的是同一个对象。
    let a = {
    web: "你好,世界"
    };
    let b = a;
    a.web = "hw";
    console.log(b);   // hw
    undefined
  • 对声明但未赋值的变量返回类型为 undefined 表示值未定义。
  • 对未声明的变量使用会报错,但判断类型将显示 undefined。
  • 我们发现未赋值与未定义的变量值都为 undefined ,建议声明变量设置初始值,这样就可以区分出变量状态了。
  • 函数参数或无返回值是为undefined
    function hw(web) {
    console.log(web); //undefined
    return web;
    }
    console.log(hw()); //undefined
    null
  • null 用于定义一个空对象,即如果变量要用来保存引用类型,可以在初始化时将其设置为null
    var hd = null;
    console.log(typeof hd);    //object
    严格模式
  • 严格模式可以让我们及早发现错误,使代码更安全规范,具有以下特点:
  • 基本差异
  1. 变量必须使用关键词声明,未声明的变量不允许赋值
  2. 强制声明防止污染全局
  3. 关键词不允许做变量使用
  4. 变量参数不允许重复定义
  5. 单独为函数设置严格模式
    function strict(){  
    "use strict";  
    return "严格模式";  
    }  
    function notStrict() {  
    return "正常模式";  
    }  

解构差异 6. 非严格模式可以不使用声明指令,严格模式下必须使用声明。所以建议使用 let 等声明。

收藏
评论区

相关推荐

《javascript高级程序设计》核心知识总结
此文是对js高级程序设计一书难点的总结,也是笔者在看了3遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解。 摘要 js基本的数据类型和关键点 变量,作用域和内存问题 垃圾回收机制 面向对象的程序设计 实现类与继承的经典方式 BOM和DOM对象 DOM扩展与高级API介绍 高级编程技巧 跨文档消息传递和aja
js之传值与传址/undefined和null/严格模式
传值与传址 基本数据类型有五种Undefined、Null、Boolean、Number和String 引用数据类型有两种object,array,fn 两种数据类型的区别: 1. 存储位置不同 原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中; 引用数据类型直接存
前端面试题自检 JS CSS 部分
JS类型 JavaScript的简单数据类型Number , String , Boolean , Undefined , Null , Symbol typeof 操作符的返回值 number string boolean undefined object function
js判undefined | null
js判undefined | null 判 undefinedjavascriptvar exp undefined;if (typeof(exp) "undefined"){ alert("undefined");} 判 nulljavascriptvar exp null; if (exp && typ
你不可不知的JS面试题(第一期)
1、JS中有哪些内置类型?7种。分别是boolean、number、string、object、undefined、null、symbol。 2、NaN是独立的一种类型吗?不是。NaN是number类型。 3、如何判断是哪个类型?Object.prototype.toString.call(),返回为[object Type]。现在我们来验证一下。Objec
你不可不知的JS面试题
1、JS中有哪些内置类型?7种。分别是boolean、number、string、object、undefined、null、symbol。 2、NaN是独立的一种类型吗?不是。NaN是number类型。 3、如何判断是哪个类型?Object.prototype.toString.call(),返回为\[object Type\]。 现在我们来验证一下
javascript实践教程-05-数据类型
本节目标1. 掌握js中7种数据类型。2. 掌握5种基本数据类型number、string、boolean、null、undefined的声明。3. 掌握js中数组的声明和数组相关的方法。4. 掌握js中对象的声明和属性、方法的使用。 内容摘要本篇介绍了js中的7种数据类型,其中5种基本数据类型:number、string、boolean、null、unde
nodom2
nodom2 主要完成了常见js表达式处理包括 操作符 ()!|\*/+-><=&%,以及操作符组合如>=、===、!== 等,值null undefined true false。 代码结构有了很大优化,字符串处理变得更简单,分为字符串、变量和函数。 代码如下: class Expression{ /** * @para
JSON学习笔记(二、语法)
#### JSON和js关系 欲学JSON先学js,那么JSON和js的关系是什么样的呢? .JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。 .JSON 语法是 JavaScript 语法的子集 #### 基本语法 .数据在名称/值对中 .数据由逗号分隔 .大括号保存对象 .中括号保
JS在线预览文档最佳实践
JS在线预览文档最佳实践 ============ //你的文档地址 var file = "http://view.xdocin.com/doc/preview.docx"; //XDOC文档预览服务地址 var xurl = "http://view.xdocin.com/xdoc?_xdoc="; //传入文档
JS的部分部分疑问和小结
2015/9/1  1.在字符串中没有可以所需要查找的“X”的时候,返回的值   java:lastIndexof -1   js: IndexOf undefined... 2015/9/10  1.js:string.substr(start\[,length\])   如,selecter.dm = selectIndex.sub
Java中传值和传址
本文用一下代码说明: Java代码 [![收藏代码](http://static.oschina.net/uploads/img/201305/24084923_UHpC.png)](http://my.oschina.net/u/1012289/admin) 简单字符串String: 1. package luojing; 2. public
JavaScript 两个叹号含义
先起个例子吧~  这个用的是谋智的js引擎monkey spider  darion.yaphet@localhost.localdomain:/home/darion.yaphet> js               js> var i; js> print(i) undefined js>  js> va
JavaScript基础知识
**1:从一个界面跳转到其他界面** window.location.href="b.html" **2:判断变量是否为空** typeof obj == 'undefined' || obj == null || obj == "" **3:html引用公用的css和js** <script type="text/javascript" src=
Springboot+ajax前后端传参
记录一下Springboot前后端传参方式 基础环境:   Idea2018.3.2   maven3.6.1   jsp   js,ajax   Springboot 代码:   js: $(document).ready(function() { //添加用户信息,点击事件 $('#su