javascrpt—变量(2)

javascript变量是松散类型的本质,决定了它只是特定时间用于保存特定值的一个名字而已,

由于不存在定义变量的必须保存何种数据类型值的规则,变量的值及数据类型可以在脚本的生命周期内改变

变量的数据类型可分为基本数据类型和引用类型;

基本数据类型值指的是简单的数据段,而引用类型是多个值构成的对象;

再将一个值赋给变量时,解析器必须确定这个值是基本类型还是引用类型,

基本类型:(undefined、null、Number、Boolean、String)是按值访问的,因为可以操作保存在变量中的实际的值
引用类型:引用类型的值保存在内存中的对象;

javascript不允许直接访问内存中的位置,即不能直接操作对象的内存空间,
在操作对象时,实际上是在操作对象的引用而不是实际的对象,故引用类型的值是按引用访问的!

1、我们不能给基本类型的值添加属性,尽管这样不会犯错

1 var person= new Object();
2 person.name=‘naruto‘;
3 alert(person.name);
4 name.age=‘20‘;
5 alert(name.age);

2、复制变量的值
(1)基本类型:如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,
然后把该值复制到为新变量分配的位置上

var num1=0;
var num2=num2;

(2)引用类型:当一个变量向另一个变量复制引用类型的值,同样会将存储在对象中的值复制一份到新变量的空间,
不同的是,这个值的副本实际上是同一个指针,而这个指针指向存储在堆中的一个对象!
复制结束后两个变量实际将引用同一个对象

1 var obj1=new Object();
2 var obj2=obj1;
3 obj1.name=‘naruto‘;
4 alert(obj2.name)//naruto

3、值传递
ECMAScript中所有函数的参数都是按值传递的,也就是说,把函数外部的值复制给函数内部的参数!
基本类型的传递如同基本类型的复制,引用类型的传递如同引用类型的复制

//基本类型
function addTen(num){
    num+=10;
    return num;
}
var count=20;
var result=addTen(count);
alert(count);//20
alert(result);//30

//引用类型
function setName(obj){
    obj.name=‘naruto‘;
}
var person=new Object();
setName(person);
alert(person.name);//naruto

function setName(obj){
    obj.name=‘naruto‘;

    obj=new Object();
    obj.name=‘narutowlll‘;
}
var person=new Object();
setName(person);
alert(person.name);//naruto
//在函数内部重写obj时,这个变量引用就是一个局部对象,
//这个局部对象在函数执行完立即被销毁!

4、类型检测

(1)typeof操作符确定一个变量是String、Number、Boolean、undefined
如果一个对象是null或对象,typeof会返回Object

 1 var i=‘naruto‘;
 2 var j=true;
 3 var k=0;
 4 var u;
 5 var v=null;
 6 var o=new Object();
 7
 8 alert(typeof i);//string
 9 alert(typeof j);//boolean
10 alert(typeof k);//number
11 alert(typeof u);//undefined
12 alert(typeof v);//object
13 alert(typeof o);//object

(2)instanceof:检测对象的类型;如果使用instanceof检测基本类型数据时,则始终返回false;

1 var person=new Object()
2 alert(person instance Object);//true
3 var date=new Date();
4 alert(date istanceof Date)//true
5 var arr=new Array();
6 alert(arr instance Array);//true
时间: 2024-07-28 16:32:47

javascrpt—变量(2)的相关文章

前端面试合集

VUE 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created和mounted的区别 6.vue获取数据在哪个周期函数 7.请详细说下你对vue生命周期的理解? vue路由面试题 mvvm 框架是什么?vue-router 是什么?它有哪些组件 active-class 是哪个组件的属性?怎么定义 vue-router 的动态路由? 怎么获取传过来的值vue-router 有哪几种导航钩子?6.$ro

Linux下修改环境变量PATH

1.什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行. 我们知道查阅文件属性的指令ls 完整文件名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:"为什么我可以在任何地方执行/bin/ls这个指令呢? " 为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH 的帮助所致呀! 当我们在执行一个指令癿时候,举例

Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

原文:http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量) 用文本编辑工具打开用于启动Tomcat的批处理文件startup.bat,仔细阅读.在这个文件中,首先判断CATALINA_HOME环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME的值.接着判断当前目录下是否存在bin\catalina.bat,如果文件

JavaScript的进阶之路(二)函数简介,变量、作用域和内存问题

<h3>ECMAScript中函数不存在函数签名的概念,没有重载</h3><h3>无需指定返回值,可以在任何时候返回任何值.未指定返回值的函数,返回的是一个特殊的undefined值</h3> <script type="text/javascript"> function sayHi(){ console.log("Hi"); }; sayHi(); function sayName(name,age){

Linux下修改.bash_profile 文件改变PATH变量的值

Linux中含有两个重要的文件 /etc/profile和$HOME/.bash_profile 每当系统登陆时都要读取这两个文件,用来初始化系统所用到的变量,其中/etc/profile是超级用户所用,$HOME/.bash_profile是每个用户自己独立的,我们可以修改该文件来设置一些变量. 命令用法如下 $ cd (进入用户登陆目录) $ls –al .bash_profile(.bash_profile为隐藏文件,因此要用ls –a命令查找) $vi .bash_profile(用vi

linux安装maven及配置环境变量 配图

Maven 3.5.0 maven安装和环境变量的配置 1 下载 maven 链接:http://pan.baidu.com/s/1qXXjXfe 密码:r92r 2 解压安装包 tar zvxf apache-maven-3.5.0-bin.tar.gz 3  配置maven环境变量 vi  /etc/profile   编辑系统配置文件 #set Maven environmentexport MAVEN_HOME=/usr/local/software/dir-maven/apache-m

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

[转]表变量和临时表的比较

本文转自;http://www.cnblogs.com/CareySon/archive/2012/06/11/TableVariableAndTempTable.html 关于表变量是什么(和表变量不是什么),以及和临时表的比较让很多人非常困惑.虽然网上已经有了很多关于它们的文章,但我并没有发现一篇比较全面的.在本篇文章中,我们将探索表变量和临时表是什么(以及不是什么),然后我们通过使用临时表和表变量对其解密. 表变量 表变量在SQL Server 2000中首次被引入,那么,什么是表变量呢?

Java的成员变量初始化

对于方法里面的成员变量,Java要求程序员强制提供一个初始化的值.比如下面这个方法就会出错: public class Breakyizhan{ public void Z(){ int z; z++; } public static void main(String[] args) { Breakyizhan B = new Breakyizhan(); B.Z(); } } /* (www.breakyizhan.com) 输出结果是: 编译会出错,方法变量没有初始化 */ 而对于类的数据,