初学杂烩——第三章

数据类型:原始类型|对象类型 概念:能够表示并操作的值的类型称之为数据类型;变量是一个值得符号名称;

原始类型:

  数字,字符串,布尔值,null(空),undefined(未定义)

对象类型:真值

  对象(属性的集合)->特殊对象:全局对象,数组类,函数类,日期类,正则类,错误类  /*类相当于对象类型的子类型*/

           ->普通对象:"命名值"的无序集合

原始值和对象之间的区别:

  1.原始值是不可更改的;对象的属性,方法都是可更改的。

  2.原始值的比较是值得比较;对象的比较并非值得比较,换句话说,哪怕是两个一模一样的人,他们也只能称之为双胞胎,而不是一个人。

内存管理:js解释器有自己的内存管理机制,所以不用考虑内存的回收问题。

面向对象:数据类型本身可以定义方法来使用值。如:数组a对其元素进行排序,只需:a.sort()即可。/*原始类型除null和undefined都是有方法的值*/

变量:无类型,可以被赋予任何类型,也可以重新被赋予任何类型。关键字 var

作用域:全局和局部变量

数字:js所有数字均用浮点数值表示(64位浮点格式);数组索引是基于32位整数

  数字直接量:当一个数字直接出现在js程序中时,我们称之为数字直接量,对应的有整型直接量以及浮点型直接量

    整型直接量:十进制整数(0~10),十六进制值(以"0x"或"0X"为前缀,如0xff),八进制部分支持(以"0"为前缀),但是不建议使用

    浮点型直接量:3.14, .333, 6.02e23, 1.47E-32

Math:

  Math.sqrt()

  Math.pow(x,y);x的y次幂,如果y是1/3 则变成了x的立方根

  Math.round(x);x的四舍五入(对浮点型)

  Math.ceil(x);向上求整(大于等于)

  Math.floor(x);向下求整(小于等于)

  Math.abs(x);x的绝对值

  Math.max(a,b,c);返回最大值,对应min返回最小值

  Math.random();生成一个大于等于0小于1.0的伪随机数。/*非常常用的一个函数*/

  Math.PI;圆周率

  Math.E;自然对数的底数

  Math.sin(0),另外还有cos,atan等三角函数

  Math.log(10);10 的自然对数

  Math.log(100)/Math.LN10;以10为底100的对数

  Math.log(512)/Math.LN2;以2为底521的对数

  Math.exp(3);e的三次幂

算术运算错误:

  溢出:Infinity(无穷大),-Infinity(无穷小)

  下溢:当运算结果无限接近于零并比Javascript能表示的最小值还小的时候发生的一种情形。"零"或者"负零" /*负零和正零值是相等的,只有在做为除数时不一样。*/

  被除零:Infinity(无穷大),-Infinity(无穷小),0/0返回NaN(not-a-number) /*这里的NaN甚至和自己都不相等,所以isNaN()里面是通过x!=x来判断的*/

二进制浮点数和四舍五入错误:

  实数有无数个,但是js通过浮点数的形式只能表示其中有限个数(18437736874454810627个),所以很多时候仅仅是一个近似值。

  采用了IEEE-754浮点数表示法(一种二进制表示法,可以精确地表示1/2,1/8,1/1024等),这导致类似0.1这样的简单数字都不能精确表示……(如.3-.2与.2-.1不相等)

  /*真实运行环境:0.3-0.2=0.09999999999999998*/

文本:通过字符串类型来表示,而字符串由一组16位值组成的不可变的有序序列。

  字符串:长度是16位值的个数。/*没有所谓的字符型*/

  字符串所有的操作方法都是作用于16位值,而非字符,且不会对代理项对做单独处理,也不会做标准化加工,甚至不能保证字符串是合法的UTF-16格式。

  字符串直接量:单引号与双引号之间可以相互包含。

ECMAScript3中,字符串直接量必须写在一行。

ECMAScript5中,字符串直接量拆开写每行需用反斜线“\”结束。

转移字符:以"\"加上一个字符就会发生化学反应……

  \n:换行符

  \o:NUL字符

  \b:退格符

  \t:水平制表符

  \v:垂直制表符

  \f:换页符

  \r:回车符

  \‘:单引号;\":双引号;\\:反斜线;

  有两个特殊的转义字符是通用的:

    \xXX:通过16进制数表示Latin-1或Unicode中的任意字码。/*例如\xA9表示版权符号*/

    \uXXXX:由4个十六进制数指定任意的Unicode字符。/*例如\u03c0表示字符π*/

J s的内置功能:

  1.字符串之间用"+"可以连接

字符串的方法:

  str.charAt(index):获取str对应下标为index的字符

  str.substring(start,length):获取str从下标start开始,长度为length的子字符串。/*与slice方法相同*/

  str.slice(-3):获取最后三个字符。/*只有一个参数的情况*/

  str.indexOf("l"):字符"l"首次出现的位置,对应的有str.lastIndexOf("l"),以及s.indexOf("l",3);从位置3开始(包括位置3),首次出现字符"l"的位置。

  str.split(","):分割成若干子串,即字符串数组。

  str.replace("h","H"):将str中所有的"h"替换成"H"。

  str.toUpperCase():全部大写,对应的有toLowerCase();

  记住,在Js中字符串是固定不变的,类似replace()以及toUpperCase()的方法都是返回新字符串,原字符串本身并没有发生变化

  /*在ECMAScript5成型之间,绝大部分的浏览器已经支持str[index]的访问形式。*/

模式匹配:

Js定义了RegExp()构造函数,用来创建表示文本匹配模式的对象。这种模式称为"正则表达式",采用的是Perl中的正则表达式语法。

String和RegExp对象均定义了利用正则表达式进行模式匹配和查找与替换的函数。

RegExp:是一种强大和常用的文本处理工具。

  1.并不是JavaScript的基本类型,和Date一样,只是一种具有实用API的特殊对象。/*API很丰富*/

  2.但是依然具有直接量写法。/*两条斜线之间的文本构成一个正则表达式直接量*/

RegExp的语法规则:

  /^HTML/  匹配以HTML开始的字符串

  /[1-9][0-9]*/  匹配一个非零数字,后面是任意个数字

  /\bjavascript\b/i  匹配单词"javascript",忽略大小写

RegExp的方法:

  pattern.test(str);返回布尔值,是否匹配成功

  str.search(pattern);返回首次匹配成功的位置。如果匹配不到,返回-1

  str.match(pattern);所有匹配组成的数组

  str.replace(pattern,"#");将匹配到的都替换成"#"

  str.split(/\D+/);用非数字字符截取字符串。/*例如:"a1,2,3"=>["","1","2","3"]*/

布尔值:任何JavaScript的值都可以转换为布尔值。当js期望使用一个布尔值的时候,假值会被当成false,真值会被当成true

  false(假值):undefined,null,0,-0,NaN,"" //空字符串

  true(真值):其他所有值,包括所有对象(数组)

  所以直接用if(o)来判断对象o是不是假值。/*这里有一个操作符可以学习:!==,不等操作符,*/

  API:toString(),转换成对应的字符串,"true","false"

布尔运算符:

  &&:与(AND)操作

  ||:或(OR)操作

  !:非(NOT)操作,一元操作符

null:特殊值,用来描述"空值",执行typeof运算返回字符串"object",可见是一个特殊的对象值,含义是"非对象"。

  通常认为null是它自有类型的唯一一个成员,表示数字、字符串和对象是"无值"的。

undefined:更深层次地明确是"未定义"。也表示"值得空缺"。与null在"=="是相等的,但是在"==="是不等的。

/*null和undefined没有任何属性和方法,所以使用"."或者"[]"会报类型错误:TypeError*/

/*undefined,系统级的,出乎意料的或类似错误的值的空缺;null,程序级的,正常的或意料之中的值的空缺--->赋值给变量或者属性,用于参数传入函数*/

全局对象:在JavaScript解释器启动时会创建一个新的全局对象,并给它一组定义的初始属性:

  .全局属性,比如undefined,Infinity和NaN

  .全局函数,比如isNaN()、parseInt()和eval()

  .构造函数,比如Date()、RegExp()、String()、Object()和Array()

  .全局对象,比如Math和JSON

  /*这些初始属性并不是保留字,但是应该作为保留字来对待。*/

  在代码的最顶级,使用this关键字可以引用全局对象:var global=this;

  在客户端JavaScript中,Window对象充当了全局对象,其中的window就相当于前文讲到的this来引用全局对象,

    除此之外,它针对Web浏览器和客户端JavaScript定义了一少部分其他全局属性。

PS:如果代码声明了一个全局变量,那么这个全局变量就是全局对象的一个属性。

包装对象:

  js对象是一种复合值(它是属性或已命名值的集合)

  通过"."符号来引用属性值,如果该属性值是一个函数时,称其为方法,调用时需加上"()"。

  1.var s="hello world";这里的s是字符串直接量,本身不是对象,没有任何的属性和方法。

  2.但是当引用s.substring(0,2)等字符串的属性的时候,就会通过调用new String(s)的方法转换成对象。

  3.当属性引用完毕后,便会销毁这个对象。---这里的临时对象就是被称作包装对象

  同理数字和布尔值也是如此,一个是通过Number(),一个是Boolean()

时间: 2024-10-29 19:07:09

初学杂烩——第三章的相关文章

初学杂烩——第五章 语句

第四章 核心关键词(表达式)-->短语 对应过来 语句就是js的整句或命令,以分号结束. 表达式是计算一个值,而语句是使得某件事发生,或者说某些值发生了改变---即带有“副作用”. 表达式语句:带有副作用的表达式,诸如赋值和函数调用,可以单独作为语句使用. 复合语句和空语句:用花括号括在一起的语句是一条复合语句:空语句,比如if(flag):这个条件语句之后有且仅包含一条语句,这个例子里便是空语句 空语句的实例(确实是有它的用处的):for(i=0;i<a.length;a[i++]=0);

初学杂烩——第四章

表达式:js中的一个短语,计算会得出一个结果. 原始表达式(简单表达式,一类表达式):表达式的最小单位,有常量,直接量,关键字和变量  /*直接量:直接在程序中出现的常数值*/ 保留字中的原始表达式:true,false,null,this 如果变量名不存在,运算结果是:undefined,但在ECMAScript5的严格模式中,这回抛出一个引用错误异常. 复杂表达式:由简单表达式组成,例: 数组访问表达式=表示数组的表达式+左方括号+整数表达式+右方括号 函数调用表达式=表示函数对象的表达式+

第三章—Windows程序

这一章我都不知道该如何写了,呵呵~~ 毕竟,Win32是一个非常深奥的系统,目前还容不得我这种 小辈在这儿说三道四,不过,我既然是要写给那些入门阶段的朋友们看的,又不是写给那些搞程序设计老鸟看的,所以,我也犯不着怕被人背后指着骂 本章的名字就叫<Windows程序>而不是<Windows程序设计>所以,我只是讲一些关于Windows程序运作的原理: Windows 为什么叫Windows,相信所有用过的朋友都可以明白,那桌面上一个一个的窗口,就是它名字的由来.也就是这一个又一个窗口

构建之法前三章读后感

一. 软件作为一个产品,在提供用户使用前经历了许多工序,我们用工程的方式将开发软件的工序,过程加以工程化,系统化.成立了一套完整的体系后,有利于帮助我们开发软件,乃至于大型的系统. 软件具有一定的特殊性,使得软件工程师们做开发提升了一定的难度,但软件工程有助于软件系统的开发,帮助工程师们设计,构建,测试和维护软件.所以,软件工程的最终目的是帮助工程师们创造“足够好”的软件,提高软件的质量,用户满意度,可靠性,可维护性等. 第一章问题:怎么才算是一个真正的软件工程师? 二.   一个优秀的软件,通

0320 《构建之法》前三章观后感

第一章.为我们解释什么是软件,什么是软件工程,读完这章对这些概念有一定的认识这章让我明白,代码不能盲目的敲,好的软件并非两三天,并非一两个人就能赶出来的,需要大家的精诚合作.同时,在编写程序之前,还需要做一系列的分析.设计,要满足客户的需求,后续还要对软件进行测试.维护等.在这之前,我一直觉得能把程序运行,能有正确的结果,那就完成任务了,可这只是整个软件流程的一部分而已.看了邹老师的书,才知道其实创新有很多的方面,除了技术,还有商业思路,差异化等等,这些都给了我很大的感触,作为一名程序员,我们不

家庭作业——第三章

第三章家庭作业    3.69和3.70 3.69 A:long trace(tree_ptr tp)    {        long ret = 0;        while(tp != NULL)        {           ret = tp->val;           tp = tp->left;        }        return ret;    } B:作用是从根一直遍历左子树,找到第一个没有左子树的节点的值. 3.70 A:long traverse(t

第三章 Linux操作系统的安装

第三章 Linux操作系统的安装 因为笔者一直都是使用CentOS,所以这次安装系统也是基于CentOS的安装.把光盘插入光驱,设置bios光驱启动.进入光盘的欢迎界面. 其中有两个选项,可以直接按回车,也可以在当前界面下输入 linux text 按回车.前者是图形下安装,可以动鼠标的,后者是纯文字形式的.建议初学者用前者安装.直接回车后,出现一下界面: 这一步是要提示你是否要校验光盘,目的是看看光盘中的安装包是否完整或者是否被人改动过,一般情况下,如果是正规的光盘不需要做这一步操作,因为太费

《C#高级编程》【第三章】对象和类型 -- 学习笔记

在看过C++之后,再看C#的面向对象感觉就不难了,只是有一些区别而已. 1.类定义 使用class关键字来声明类,其和C++不同的地方是在大括号之后不需要冒号 class 类名 { //类的内部 } //C++这里有一个冒号,而C#没有 2.类成员 3.字段与属性 首先我们先区分一下C#数据成员中的字段.常量与事件成员.字段.常量是与类的相关变量.事件是类的成员,在发生某些行为时(如:改变类的字段或属性,或进行某种形式的用户交互操作),它可以让对象通知调用方. 那么现在我们在来看看字段与属性,属

标准库》第三章 包装对象和Boolean对象

第三部分  标准库 ***************第三章   包装对象和Boolean对象******************* 一.包装对象的定义[1]有人说,JavaScript语言"一切皆对象",数组和函数本质上都是对象,就连三种原始类型的值--数值.字符串.布尔值--在一定条件下,也会自动转为对象,也就是原始类型的"包装对象". 所谓"包装对象",就是分别与数值.字符串.布尔值相对应的Number.String.Boolean三个原生对象