JavaScript知识 一、JS的数据类型
一、JS的数据类型
1.基本类型
JS共有5大基本类型,分别是:
1)Undefined。他只有一个值:undefined。如果一个变量被定义但是没有给他赋值,那么这个时候系统会默认给这个变量赋值为undefined。
2)Null。它同样也只有一个值:null。他是一个引用类型,当一个准备保存对象的变量因为种种原因还没有指向一个对象的时候,可以给这个变量赋值为null,通常也是这么做的。
3)Number。数值类型,他是C#中的整型和浮点型的集合,它具体是什么类型还要看它被赋值的情况,一般来说赋值为什么类型他就为什么类型。另外注意 var num = 1.0;这个时候num是个整型,只有小数点后有确切的不为0的值的时候才是浮点型。关于Number类型还有一些其他知识点,如:NaN表示该值不是一个数字,isNaN()可以判断传入的值时候为Number类型;parseInt()可以将传入的参数转成数值类型,如果包含非数值类型字符串的话,会自动将字符串去掉,parseInt("123blue")的返回值为123,字符串blue部分被忽略,因此parseInt()方法可以理解为尝试把传入的参数转换成整型,转换不了的话会将转换不了的部分忽略。parseFloat()方法与parseInt()方法类似。
4)Boolean。布尔类型,类似C#中bool类型,有true和false两个取值,但是没有类似C#中0对应False,1对应true这样的与数字的对应关系。
5)String。字符串类型,保存的是0到16位的UNICODE代码组成的字符序列。
2.复杂类型
1)Object类型。是JS的顶级“父类”(因为JS中没有类的概念,说他是父类只是为了理解上的方便),是一组数据和方法(功能)的集合,但它不具备传统面向对象语言所支持的类和接口。Object类型本质是一个无序的键值对列表,类似于集合,json格式。它包含7个方法,分别是:
constructor() 构造函数?
hasOwnProperty(propertyName) 检查属性是否在当前对象中
isPrototypeOf(object) 检查对象是不是该对象原型
propertyIsEnumerable(propertyName) 检查属性是否能用for-in来循环
toString()
valueOf()
创建Object可以有多种方式:
通过new 关键字:var s = new Object(); s.name="james"; s.age=27;
通过JS的简单定义方式:var s = {}; s.name="james"; s.age=27;
对象字面量表示法:var s = {"name":"james","age":"27"};PS:json格式数据的key可以不用双引号括起来,value如果不是字符串的话也可以不用双引号括起来,但是推荐key和value都要用双引号括起来,以避免不必要的麻烦。
访问Object对象的属性的方法:
s.name 直接点出来。
s["name"];使用方括号(类似于索引器)的优点是可以通过变量来动态访问属性:var proName="name"; alert(s[proName]);
2)Array类型。是数据的有序列表
与其他数组的不同:
数组元素可以是任何类型,同一个数组的元素类型也可以不一样,相当于C#中的List<object>
长度可以任意改变
数组的length属性可读写(可以利用这一点删除数组元素)
数组的栈方法 后进先出
push() 往里加
pop() 从栈头往外拿,拿出来以后数组中的元素数量就会发生变化
数组的队列方法 先进先出
shift() 从队列尾部往外拿
unshift() 从队列尾部往里加
排序
sort() 排正序,将数组中的数据按照一定的顺序排列,参数可以传递一个匿名方法(类似于接口)
reverse() 翻转排列
连接数组
concat() 示例:var colors=["a","b"];var newcolor=colors.concat("yellow",["c","d"]);结果colors有了5个元素。concate方法中若传入数组,会把该数组拆分,将其中元素加入目标数组中。若传入json格式数据,一个json数据就看成一个元素加入数组。
3)Function类型。函数是对象,函数名是指针
声明方式(2种):
function sum(x,y){return x+y;}
var sum=function(x,y){return x+y;}//函数表达式
Function类型没有重载。Function类型本质上就是一个数据类型,和其他类型一样,多次赋值的时候,后一次赋值会覆盖(替代)前一次赋值。多个同名函数其实就是对同一个函数对象赋值,后一个赋值会覆盖前面的赋值,所以执行的都是最后一次的函数定义。
讲Function的属性之前需要先了解JS代码的执行环境和作用域以及其他一些知识点:
a)执行环境:就是当前函数(方法)所处在的父环境。比如在window下执行的函数他的执行环境就是window。真正的全局执行环境是Global,只不过大多数浏览器不公开代码访问,只是通过window来间接访问。
b)if等语句没有用块状作用域,JS的作用域与C#的不同,if,for等用大括号括起来的代码并不能形成一个块状作用域。
c)用var声明变量时,会他把添加到最近的可用环境,若不用var则把他添加的父环境中,这就理解了不用var定义的一个变量是全局变量的原因。
d)声明语句会首先执行,不管你把它放到哪里。虽然JS代码是从上到下顺序执行的,但是遇到声明的语句,编译器就会先执行声明语句,以保证其他语句执行的过程中不会因为遇到没有声明的变量而报错。
e)垃圾回收。将一个保存对象的变量设置为null,相当于切断了变量(栈)和引用值(堆)之间的关系,垃圾回收站就会自动回收
Function的内部属性:
arguments
他是一个数组,保存传入的参数。
callee是一个指针,保存拥有这个arguments对象的函数对象,也就是这个函数的堆地址,当函数需要调用自己的时候,可以使用callee,不用出现自己的函数名,从而降低耦合度。
this
指向当前函数所在的执行环境,也就是函数在执行时所处的作用域
函数对象的属性和方法
length
函数定义的命名参数的个数
函数名.length
prototype(原型)
保存它们所有实例方法的真实所在
apply([要改变的作用域])
改变该函数对象的作用域 也就是改变this的值
示例代码
alert(this);
return x + y;
}
//window.sum(1,2);
function callS() {
callS.callSum1(1, 2);
}
callS.callSum1 = function (x, y) {
alert(this);
var s = sum.apply(this, arguments);
//sum(1, 2);
return s;
}
callS();
call()方法与apply()方法类似
以上两个方法不是继承而来的,可以扩充函数赖以存在的作用域,这样做最大的好处是对象和方法不需要有任何耦合关系。两者传入的第一个参数都是要改变成的作用域,第二个参数apply传入的是一个参数数组,call传入的是每一个命名参数。
二、值类型和引用类型
讲了这么多基本类型(除null以外都是值类型)和复杂类型(基本上都是引用类型),我们需要了解语言设计者为什么要设计值类型和引用类型。两者的区别是什么?
1.值类型内容长度固定,保存值的存在范围引用类型内容长度不固定,可以存储不定长度的数据;
2.值类型只能单纯的储存值,如整型,字符串等。而引用类型可以储存对象的堆地址,可以使多个变量指向同一个对象;
3.也是最主要的一点,引用类型可以缓解栈的存储压力(值类型储存在栈中)。
4.在JS语法中基本数据类型不能动态添加属性而引用数据类型可以动态添加属性。
三、检测类型的关键字
1.typeof
判断基本类型的类型 返回true or false
2.instanceof
判断复杂(引用)类型的类型 返回true or false
如果用它判断基本类型 则永远返回false
四、eval()方法
eval()方法相当强大,他就相当于一个解析器。它只接受一个参数,就是要执行的JS代码字符串。当解析器发现eval()时,他会把eval()中的参数解析出来,插入到eval执行的位置,效果相当于在相应的位置直接写入JS代码。
五、创建对象
1)简单工厂模式
2)构造函数模式。每一个实例都包括所有的方法,这样会浪费内存。
3)原型模式。把方法保存在原型中,这样所有实例可以调用这个方法,而不用每个实例都要保存这个方法
JavaScript知识 一、JS的数据类型的更多相关文章
- JavaScript笔记1———js的数据类型
JS的数据类型有: 1.数值类型(Number):js中所有数字均用浮点数字表示. 可以表示32位(即4字节)的整数,也可以表示64位(即8字节)的浮点数(小数). 也可以用二进制.八进制.十进制.十 ...
- JavaScript之JS的数据类型
前言 JavaScript一共有6中数据类型: 基本数据类型(5):字符串(String).数字(Number).布尔(Boolean).数组(Array).空(Null).未定义(Undefined ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- Python--前端基础之JavaScript(JS的引入方式,JS的变量、常量和标识符,JS的数据类型,运算符,流程控制,JavaScript的对象)
JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...
- javascript中五种基本数据类型
前言: JavaScript中有五种基本数据类型(也叫做简单数据类型)分别为:undefined.null.bolean.number.string:另外还含有一种复杂的数据类型:object. 深入 ...
- Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识
摘要: 详解原型污染. 原文:Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识 作者:Lucas HC Fundebug经授权转载,版权归原作者所有. 可能有信息敏感的同学已 ...
- 最新的JavaScript知识总结,欢迎各位大佬指正,需要的留下邮箱,给你们发原稿(PDF版)
小编整理javascript用的是有道云笔记,导出的word版本,但是代码块显示格式是乱的,不便于阅读 所以,各位有需要的话,小编可以将导出的pdf版发给大家!pdf版跟word没有什么区别,知识没法 ...
- JavaScript知识总结<一>
JavaScript核心基础语法: 1.什么是JavaScript? 我们知道在Web标准中网页由:结构.形式.行为三部分组成:结构由标准形式XHTML.形式又标准形式CSS,那么行为的表现就由Jav ...
- JS中数据类型及原生对象简介
js是一种专门设计用来给网页增加交互性的编程语言,它的技术体系包含了一下几个方面: 1.JavaScript核心语言定义:包括数据类型,变量,常量,运算符,语句等. 2.原生对象和内置对象 3.浏览器 ...
随机推荐
- 由overflow-x:scroll产生的收获
我们都知道float:left属性会让元素向左浮动,如果用一个div将几个左浮动的li包起来,是不是div的宽度被li撑得很长很长呢,代码: <!DOCTYPE html> <htm ...
- AMD与CMD(转载)
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题 ...
- js数组操作总结
1.数组的检测 ECMAScript3 if(value instanceof Array){ //执行操作 } 假定单一全局环境,如果网页存在多个框架,多个window,Array具有不 ...
- 为什么我如此热爱这样一个比赛(转自vici)
为什么我如此的热爱这样一个比赛呢?因为它总能带给我一个目标,让我去努力实现它.因为可以看到胜利的希望,于是不断的去追逐.虽然其中的过程可能是比较艰辛的. 对于天才选手,作为天生的冠军,大概凭借天赋 ...
- Ubuntu14.04或16.04下Hadoop及Spark的开发配置
对于Hadoop和Spark的开发,最常用的还是Eclipse以及Intellij IDEA. 其中,Eclipse是免费开源的,基于Eclipse集成更多框架配置的还有MyEclipse.Intel ...
- springMVC4 注解配置实例
结构: maven配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...
- phpMoadmin CVE-2015-2208 远程代码执行漏洞分析
原文:http://www.thinkings.org/2015/03/05/cve-2015-2208-phpmoadmin-exec-vul.html phpMoAdmin 是一个用PHP 开发的 ...
- js 预处理用户上传图片
前几个月闲得无聊写得一段代码,没想最近刚好用上了,在硬盘里翻了半天找回来,还没好好整理直接用上了手机用户拍照上传的图片一般都在1M 到4M 之间,如果只是用作头像尺寸就可以缩小很多,1M甚至几M的图转 ...
- TCP和UDP的区别
(1)TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务:(2)TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序:UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等 ...
- 【五】将博客从jekyll迁移到了hexo
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdo ...