精华内容
下载资源
问答
  • 原始数据类型存储在栈中,占空间小,大小固定,属于频繁使用数据。 引用数据类型存储在堆中,占空间大,大小不固定,属于不频繁使用数据。 2. 传值方式不同 原始数据类型 按值传递,无法改变一个原始数据类型...

    一、他们是什么

    1. 原始数据类型:5种

    - Number
    - String
    - Boolean
    - Null
    - Undefined

    2. 引用数据类型:3种

    - Object (对象)
    - Array(数组)
    - function(函数)

    二、区别

    1. 存储位置不同

    • 原始数据类型存储在中,占空间小,大小固定,属于频繁使用的数据。
    • 引用数据类型存储在中,占空间大,大小不固定,属于不频繁使用的数据。

    2. 传值方式不同

    • 原始数据类型 按值传递,无法改变一个原始数据类型的值;
    • 引用数据类型 按引用(地址)传递,引用数据类型值可以传递;

    三、其他

    1 和 Number(1) 区别

    • 1是基本数据类型
    • Number(1)是包装对象类型。
    展开全文
  • Object (函数function,对象、数组,正则、Data等等非原始数据类型属于引用数据类型Object) Typeof对应返回值: 注意: 1.typeof返回值均为小写 2.String类型和String构造函数要分清,'str’String类型...

    js数据类型

    一、结论:

    在js中的数据类型有:

    原始数据类型:

    Undefined,Null,Boolean,Number、String、Symbol(ECMAScript 6 新增)

    引用数据类型:

    Object (函数function,对象、数组,正则、Data等等非原始数据类型的都属于引用数据类型Object)

    typeof对应的返回值:

    原始数据类型除了null返回"object"其余都返回对应的小写字符串
    引用数据类型除了function返回function其余都返回"object"

    在这里插入图片描述

    注意:

    1.typeof的返回值均为小写
    2.String类型和String构造函数要分清,'str’是String类型的数据,new String()是个object,new String()中的String是个构造函数!

    以下是我对不同的数据进行typeof得出的:
    //注释为结果
    注释下方为typeof的数据
    /* */注释为解释

    //string
    ''        	    /*空字符串*/
    'str'			/*普通字符串*/
    	
    //boolean
    true          
    
    //number
    3           
    NaN           /*NaN的数据类型是Number*/
    
    //object
    null		/*实际上null的数据类型是Null*/
    			/*为什么typeof null返回object呢?*/
    			/*最下方有详细解释*/
    {}			
    []			/*其他所有非基本数据类型都是Object类型*/
    new RegExp()/*包括Array、RegExp、Data、Math等等*/
    			
    
    //undefined
    undefined	/*undefined的数据类型是undefined*/
    
    //function
    function demo(){}
    Object/*注意往下三个均为构造函数,所以他们是Fucntion object类型*/
    String/*所以typeof返回的是function*/
    Number
    
    

    二、代码:

    <script>
        
        //string
        console.log("typeof '':"+typeof '');
        console.log("typeof 'str':"+typeof 'str');
    
        //boolean
        console.log("typeof true:"+typeof true);
    
        //number
        console.log("typeof 3:"+typeof 3);
        console.log("typeof NaN:"+typeof NaN);
    
        //Object
        console.log("typeof null:"+typeof null);
        console.log("typeof {}:"+typeof {});
        console.log("typeof []:"+typeof []);
        console.log("typeof new Object():"+typeof new Object());
        console.log("typeof new String():"+typeof new String());
        console.log("typeof new Number():"+typeof new Number());
        console.log("typeof new RegExp():"+typeof new RegExp());
        
        //undefined
        console.log("typeof undefined:"+typeof undefined);
    
        //function
        console.log("typeof function demo(){}:"+typeof function demo(){});
        console.log("typeof Object:"+typeof Object);
        console.log("typeof String:"+typeof String);
        console.log("typeof Number:"+typeof Number);
        
    </script>
    

    三、输出结果:

    在这里插入图片描述

    四、为什么typeof null返回的是object?

    原理是这样的,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型, null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“ object ”

    这个bug是第一版Javascript留下来的。在这个版本,数值是以32字节存储的,由标志位(1~3个字节)和数值组成。标志位存储的是低位的数据。这里有五种标志位:
    000:对象,数据是对象的应用。
    1:整型,数据是31位带符号整数。
    010:双精度类型,数据是双精度数字。
    100:字符串,数据是字符串。
    110:布尔类型,数据是布尔值。
    最低位有一位,那么标志位只有一个1字节长度;或者是零位,标志位有3个字节长度,多出两个了字节,一共多出四种类型。
    更详细内容可参考此文:
    http://www.cnblogs.com/xiaoheimiaoer/p/4572558.html

    展开全文
  • PAGE1 / NUMPAGES1 简介本文档为纵横向拉开档次法MATLAB实现可适用于工程科技领域主题内容包含globalxystdszxystdxy定义全局变量loadshuju原始数据xystd=zscore(shuju)数据无量纲处理xystdrow,符等 globalxystdsz ...
  • JavaScript 中变量是松散类型(弱类型),没有规则定义某个变量必须是什么数据类型,因此变量值和数据类型在程序运行过程中可以改变。 JavaScript 存储在变量中的数据类型可以分成两种: 原始值:Number、...

    JavaScript 中的变量是松散类型(弱类型)的,没有规则定义某个变量必须是什么数据类型,因此变量的值和数据类型在程序运行过程中可以改变。

    JavaScript 存储在变量中的数据类型可以分成两种:

    原始值:Number、String、Boolean、Undefined、Null、Symbol、BigInt

    引用值:Object(其中包括 Array、Function 等等)

    数据的存储

    原始值是直接存储在**栈(stack)**中的简单数据段,占用空间小、大小稳定,属于会被频繁访问的数据,所以存储在栈中。

    引用值是存储在**堆(heap)**中的对象,占用空间大,大小不固定。同时会在栈中存储一个该对象在堆内存中的内存地址(指针)。

    值的可变性

    在 JavaScript 中,原始值是不可变的,也就是说没有办法去修改一个原始值的本身。原始值只能进行重新赋值操作,这时候会销毁原来的值,并重新分配内存地址保存新的值,变量指向的内存地址产生了变化。

    这对于字符串来说可能并不是那么明显,因为字符串看起来像是由字符组成的的数组,并且也可以通过指定索引来获取某个字符,但是能否以此修改字符串中的字符呢,实际上,JavaScript 是禁止这样做的。

    let str = "hello";
    console.log(str[0]); // "h"
    
    str[0] = "H";
    console.log(str); // "hello"
    

    字符串中的一些方法看似返回了修改后的字符串,实际上返回的是一个新的值,原始字符串的值并未改变。

    str.toUpperCase(); // 返回 "HELLO"
    console.log(str); // "hello"
    

    而引用值是可变的——可以随时添加、删除和修改其属性和方法,始终指向同一个对象。

    let obj = {};
    obj.x = 1;
    console.log(obj); // {x: 1}
    
    let arr = ["a", "b", "c"];
    arr[3] = "d";
    console.log(arr); // ["a", "b", "c", "d"]
    

    区分可变和不可变的关键就是同一个变量对应存储数据的内存地址有没有变化。

    复制值

    原始值和引用值在通过变量复制时,行为也有所不同。原始值通过一个变量赋值给另一个变量时,原始值会创建一个新的副本,这两个变量可以独立使用,互不干扰。

    let num1 = 5;
    let num2 = num1;
    
    num2 += 1;
    console.log(num1, num2); // 5  6
    

    原始值的复制过程如下图:

    把引用值通过一个变量赋值给另一个变量时,复制的值是栈中的指针,因此两个变量实际上是指向了堆中的同一个对象。对其中一个变量进行改动,也会影响另一个变量。

    let obj1 = {};
    let obj2 = obj1;
    
    obj1.name = "小明";
    console.log(obj2); // { name: "小明" }
    

    引用值的复制过程如下图:

    值的比较

    在 JavaScript 中,原始值之间的比较和引用值之间的比较均是比较在栈中的值。

    在原始值之间的比较时,它们的值相等就会被认为相等。

    let str1 = "hello";
    let str2 = "hello";
    
    console.log(str1 === str2); // true
    

    而引用值之间的比较时,栈中的指针指向的地址相同,指向同一个对象,才会被认为相等,否则即使两个对象包含同样的属性,也会被认为是不相等的。

    let obj1 = { x:1 };
    let obj2 = { x:1 };
    let obj3 = obj1;
    let arr1 = [];
    let arr2 = [];
    let arr3 = arr1;
    
    console.log(obj1 === obj2); // false
    console.log(obj1 === obj3); // true
    console.log(arr1 === arr2); // false
    console.log(arr1 === arr3); // true
    

    参数传递

    ECMAScript 中所有函数传递都是按值传递的,所谓按值传递,就是传递变量对应栈中的那个值。也就是说,给函数传递参数时,相当于从一个变量赋值到另一个变量

    ECMAScript 中函数的参数就是局部变量。

    原始值:

    function add(num){
        return num + 1;
    }
    let count = 5;
    let result = add(count); // 此处参数传递的过程可以看作是 num = count
    console.log(count); // 5
    console.log(result); // 6
    

    引用值:

    function setName(obj){
        obj.name = "小明";
    }
    let person = {};
    setName(person); // 此处参数传递的过程可以看作是 obj = person;
    console.log(person); // {name: "小明"}
    

    引用值的例子中,虽然 obj 是局部变量,但是 obj 指向的对象是保存在全局作用域的堆内存上的。所以会发生在局部作用域中修改对象的变化反映到了全局的现象。

    类型检测

    1. 操作符 typeof

    如果要判断一个变量的类型是否为Number、String、Boolean、Undefined、Null、Symbol中的一种,可以使用 typeof 操作符。如果值是对象或 null ,那么 typeof 都会返回 “object”。

    let s = "Nicholas"; 
    let b = true; 
    let i = 22; 
    let u; 
    let sym = Symbol();
    let n = null; 
    let o = new Object(); 
     
    console.log(typeof s);   // "string"
    console.log(typeof i);   // "number" 
    console.log(typeof b);   // "boolean" 
    console.log(typeof u);   // "undefined"
    console.log(typeof sym) // "symbol"
    console.log(typeof n);   // "object" 
    console.log(typeof o);   // "object" 
    

    typeof 操作符的其他可能返回值如下:

    类型 结果
    Function “function”(按照ECMA-262规范实现 call() 方法的对象都会返回"function")
    正则表达式 “object”(Safari 5及之前版本和 Chrome 7及之前版本会返回 “function” )
    BigInt(ES 2020 新增) “bigint”
    宿主对象(由 JS 环境提供) 取决于具体实现

    2. 操作符 instanceof

    通常我们不会关心一个值是不是一个对象,而是它到底是什么类型的对象。这种情况下需要使用instanceof操作符。

    console.log(person instanceof Object);  // 变量 person 是否为 Object
    console.log(colors instanceof Array); // 变量 colors 是否为 Array
    console.log(pattern instanceof RegExp); // 变量 pattern 是否为 RegExp
    

    按照定义,所有引用值都是 Object 的实例,因此用 instanceof 检测一个引用值是否为 Object 时都会返回 true。但是如果用 instanceof 检测一个变量是否为某个原始值,则始终会返回false,因为原始值不是对象。

    总结

    原始值特点:

    1. 原始值大小固定,因此保存在栈内存中。
    2. 原始值是不可变的,只能重新赋值,这个过程会销毁旧值然后重新分配内存存储新值。
    3. 通过变量赋值复制时,会创建该值的副本。
    4. 原始值之间的比较,它们的值相等就会被认为相等。
    5. 要确定值的原始类型使用 typeof 操作符。

    引用值特点:

    1. 引用值是对象,大小不固定,因此保存在堆内存中,并且会在栈内存中保存指向这个对象的指针(引用)。
    2. 引用值是可变的,可以对值的本身进行修改。
    3. 通过变量赋值复制时,只会复制指针,结果是两个变量都指向同一个对象。
    4. 引用值之间的比较,实际上是比较它们是不是同一个对象。
    5. 要确定值的引用类型使用 instanceof 操作符。

    参数传递:

    1. 给函数传递参数时,相当于从一个变量赋值到另一个变量
    - END -

    感谢你花费宝贵的时间阅读本文,文章在撰写过程中难免有疏漏和错误,欢迎你在下方留言指出文章的不足之处;如果觉得这篇文章对你有用,也欢迎你点赞和留下你的评论哦。

    展开全文
  • AJAX 的原始写法

    2014-12-02 13:51:41
    (1)什么是ajax?  (asynchronousjavascript and xml)异步... 该技术实质,利用浏览器内置一个特殊对象(XMLHttpRequest,该对象属于BOM模型)异步地向服务器发送请求,服务器  送回部分的数据(xml或者te

    (1)什么是ajax?

             (asynchronousjavascript and xml)异步的javascript和xml,为了解决传统的web应用"等待-响应-等待"的弊端而创建的一种技术。

         该技术的实质是,利用浏览器内置的一个特殊的对象(XMLHttpRequest,该对象属于BOM模型)异步地向服务器发送请求,服务器

         送回部分的数据(xml或者text的形式),在浏览器端,可以使用这些数据部分更新页面。在整个过程当中,浏览器无刷新。

     

     

    (2)ajax对象

                       ajax对象没有标准化,要获得该对象,需要区分浏览器。

                         

                    var xmlhttprequest =null;
               if(window.XMLHttpRequest){
                     //非ie浏览器
                     xmlhttprequest = newXMLHttpRequest();
               }else{
                     //ie浏览器
                     xmlhttprequest = newActiveXObject('Microsoft.XMLHttp');
               }

                       ajax对象的属性:

                                onreadystatechange:注册监听器(即给ajax对象绑订一个事件处理函数)

                     responseText:获得服务器返回的文本。

                     responseXML:获得服务器返回的xml数据。

                     readyState:ajax在与服务器进行通讯时的状态值,

                     一共有5个,分别是0,1,2,3,4。当值为4时,表示

                     ajax对象已经获得了服务器返回的所有的数据。

                     此时,才可以使用responseText,responseXML

                     获得服务器返回的数据。

                     status:获得状态码

    (3)编程

                   方式一: get请求

                     a、,获得ajax对象

                     b、使用ajax对象发送请求

                          //open(请求方式,请求地址,同步还是异步);

                          //true:异步,ajax对象发送请求的同时,用户可以对当前页面做其它的操作。

                          //false:同步,ajax对象发送请求的同时,会锁定

                          //当前页面,用户只能等待服务器的响应。

                          xhr.open('get','check_username.do?username=zs',true);

                          //注册一个监听器

                          xhr.onreadystatechange=f1;

                          //请求参数要添加到请求地址后面。

                          xhr.send(null);

                     c、 服务器处理请求,只需要返回部分的数据给客户端。

                     d、在监听器当中,编写相应的处理代码

                        

      <span style="white-space:pre">		</span>     functionf1(){
                                //只有readyState等于4,xhr才获得了服务器返回的所有的数据
                                if(xhr.readyState== 4){
                                      //获得服务器返回的数据
                                      vartxt = xhr.responseText;  //或者responseXML
                                      //dom操作:更新页面
                                      ...
                                }
                          }

               方式二: post请求

                     a、获得ajax对象

                     b、发送请求

                          xhr.open('post','check_username.do',true);

                          //post请求,要将请求参数放到send方法里面。

                          //默认情况下,xhr对象生成的请求数据包

                          //没有content-type消息头,需要使用

                          //setRequestHeader添加这样一个消息头。

                          xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

                          xhr.onreadystatechange=f1;

                          xhr.send("username=zs");

     

    例子:

    function a(){
    <span style="white-space:pre">	</span>//获得ajax对象
       <span style="white-space:pre">	</span>var xmlhttprequest;
       <span style="white-space:pre">	</span>if(window.XMLHttpRequest){
            <span style="white-space:pre">	</span>//针对FireFox,Mozillar,Opera,Safari,IE7,IE8 
           <span style="white-space:pre">		</span>xmlhttprequest = new XMLHttpRequest();
           <span style="white-space:pre">		</span>if(xmlhttprequest.overrideMineType){
              <span style="white-space:pre">	</span>       //针对某些特定版本的mozillar浏览器的BUG进行修正 
               <span style="white-space:pre">	</span>     xmlhttprequest.overrideMineType("text/xml");
          <span style="white-space:pre">	</span> <span style="white-space:pre">	</span>}
       <span style="white-space:pre">	</span>}else if (window.ActiveXObject) {
              //针对IE
           <span style="white-space:pre">		</span>var activeName =["XSXML2.XMLHTTP","Microsoft.XMLHTTP"];
          <span style="white-space:pre">		</span>for (i = 0; i < activeName.length; i++) {
                <span style="white-space:pre">	</span>    try {
               <span style="white-space:pre">		</span>//取出一个控件名进行创建,如果创建成功就终止循环 
                     <span style="white-space:pre">	</span>//如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建
                   <span style="white-space:pre">	</span> <span style="white-space:pre">	</span>xmlhttprequest = newActiveXObject(activeName[i]);
                    <span style="white-space:pre">	</span>break;
               <span style="white-space:pre">	</span>    } catch (e) {
                   
                        }
                    }
            }
       if (xmlhttprequest === undefined || xmlhttprequest === null) {
           alert("xmlhttprequest对象创建失败!");
       }else{
           this.xmlhttp = xmlhttprequest;
    }
     
    <span style="white-space:pre">			</span>//发请求
                           var uri ='check_username.do?username=' + $F('username');
                           xhr.open('get',encodeURI(uri),true);
                           //注册监听器(绑订一个事件处理函数)
                           xhr.onreadystatechange=function(){
                                //只有ajax对象的readyState的值为4的时候,
                                //才能够正确地获得服务器返回的数据。
                                if(xhr.readyState ==4){
                                      //状态码是200,表示服务器处理正确。
                                      if(xhr.status== 200){
                                           //获得服务器返回的文本
                                           var txt =xhr.responseText;
                                           //dom操作
                                           $('username_msg').innerHTML= txt;
                                      }else{
                                           $('username_msg').innerHTML= '验证出错';
                                      }
                                }else{
                                      //xhr的readyState属性值是0,1,2,3
                                      //即xhr对象正与服务器进行通讯
                                      $('username_msg').innerHTML= '正在验证...';
                                }
                           }
                           //如果是get请求,请求参数要添加到请求地址后面
                           xhr.send(null);
    }


    展开全文
  • 不像java变量可以直接看出是什么数据类型,JavaScript直接看不出是什么数据类型,即JavaScript的数据类型是隐式。 JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object。object是...
  • 思考一个问题:字符串在js中属于基本数据类型,为什么会有属性呢? 在js中只要引用了字符串s属性,js就会将字符串值通过new String(s)方式转换成对象,这个对象继承了字符串方法,并用来处理属性引用。一旦...
  • 1. 什么是感知机? ​ 感知机(perceptron)二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。...感知机预测通过对训练数据的学习对新输入的实例进行分类。 定义1.1
  • ODS是什么? ODS 全称是 Operational Data Store,操作数据存储.“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层...
  • 前言 现在企业报表开发大部分都使用报表工具完成,成熟报表工具提供了丰富...但是,原始数据经常并不适合直接呈现,需要先做一些复杂处理,这就是数据准备环节。 从报表工具眼光上看,数据准备属于报表之外
  • 前言 现在企业报表开发大部分都使用报表工具完成,成熟报表工具提供了丰富...但是,原始数据经常并不适合直接呈现,需要先做一些复杂处理,这就是数据准备环节。 从报表工具眼光上看,数据准备属于报表之外
  • 对于基本类型,深拷贝和浅拷贝都一样的,都原始数据的复制,修改原始数据,不会对复制数据产生影响。 两者的区别,在于对引用属性的复制。 浅拷贝 浅拷贝复制引用属性时,仅仅复制指针值,没有复制指向的对象...
  • 本文梳理出了一些面试中有一定难度高频原生...原始数据类型和复杂数据类型存储有什么区别?原始类型有6种,分别undefined,null,bool,string,number,symbol(ES6新增)。虽然 typeof null 返回 object,但是nu...
  •  原始模型模式属于对象的创建模式。通过给出一个原型对象来指明所要创建的对象的类型,然后... <br />在什么情况下使用原始模式: 当对象传递的时候,对象数据会发生改变,而我们还希望用到原数据的
  • q学习 属于机器学习 今天星期一早上,在经历了一个漫长周末系统故障之后,云运营团队正在讨论发生了什么。 看起来,与一个非常先进,具有机器学习功能新库存管理系统相关联系统在周末遇到了问题。 验尸...
  • 什么是等级相关 等级相关,也称为秩相关,属于非参数统计方法,但对原变量分布不作要求。适用于那些不服从正态分布资料,还有总体分布未知和原始数据用等级表示资料。为什么要运用等级相关? 实际中,如果遇到...
  • 函数式数据结构-列表

    2021-01-12 08:38:46
    在开始之前我们先了解几个名词: 1、什么是函数式编程:函数式编程...3、什么是函数式数据结构:函数式数据结构只能被纯函数操作,纯函数一定不能修改原始数据结构或者产生副作用。函数式数据结构被定义为不可变
  • 文章目录第四章 分类分类基本概念预测任务模型分类生成模型判别模型经典分类方法决策树引入:高尔夫问题小结 第四章 分类 分类基本概念 ...常见的方法:学习数据的联合概率分布(一般会假设一下联合概率分布)
  • 原始数据从操作数据库移动到培训数据库批处理过程以及自动恢复过程均失败。 一位在周末工作行动团队成员尝试重新提交,但未提交一次,而是引起了四个部分更新,从而使培训数据库处于不稳定状态。 [...
  • js六大数据类型:number、string、Boolean、null、undefined(以上五个为原始类型)、object(数据类型) string: 由单引号或双引号来说明,如"string" ...此关键字属于js中常量,其它五种类型都对象。
  • 我为什么不喜欢微信

    2017-08-13 12:27:50
    这个问题我在知乎一个回答,原始问题什么用户不喜欢微信”?出于数据备份原因,将其复制保留一份到这里,以防丢失。以下原回答内容:我做技术出身,我非常不喜欢微信,同样也不喜欢QQ,但是为了...
  •  iris数据集里有三类花(标记为0,1,2),每一类花都有四个特征项(萼片、花瓣长和宽,标记为0,1,2,3),原始数据中,每一个特征项有多个不同取值(特征值)。这里要先提一下预处理或者说离散化,目的...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 194
精华内容 77
关键字:

属于原始数据的是什么