前言:

JavaScript权威指南作为前端人员必读书籍之一,对整个JavaScript做了详细的介绍,鄙人从今天开始每天研读一下,希望能够提高自己的水平。

第一天

一、语法结构

1、区分大小写

JavaScript严格区分大小写,对于关键字、变量、函数名和所有标识符都必须采用一致的大小写形式

注意:在html代码中并不区分大小写(xml区分!),在运行时浏览器会统一转换为小写,为了防止代码混乱,建议html中代码遵循JavaScript书写规范。

2、注释

JavaScript支持两种格式的注释,“//”和“/* */”,“//”为单行注释,“/* */”可以多行注释但注意不可嵌套注释

注意:区分html、css和JavaScript注释的区别

html注释          <!--  -->

css注释             /*   */   没有单行注释!!!!

3、变量的声明

JavaScript中标志符(即变量名)必须以字母、下划线(_)或$开头,后续可以是字母,数字,下划线和$

注意:JavaScript内置有保留字、关键字、全局变量和函数,不要使用他们作为变量名!

如有兴趣可以自行百度JavaScript保留字!

4、可选分号

分号(;)用于将语句分隔开,虽然可以省略,(如:a=3     b=2 ),但笔者不建议省略,不利于代码的维护和阅读!

二、类型、值和变量

1、数据分类

1.1    JavaScript的数据类型可以分为两类:原始类型和对象类型

原始类型:数字、字符串和布尔值(本书中将null和undefined定义为特殊原始值)

对象类型:除原始类型以外的值,对象本质上是属性的集合,每个属性由“名/值对”组成

1.2   JavaScript的变量也可分为可变类型和不可变类型

可变类型:对象和数组

不可变类型:数字,布尔值、null和undefined

注意:字符串作为特殊的类型,可以看做是字符组成的数组,你可能认为它是可变的,然而,在JavaScript中字符串 是 不可变的,未提供修改字符串内容的方法!!

2、数字

JavaScript采用IEEE 754标准定义64位浮点格式表示数字,这意味着它的最大值为±1.7976931348623157*10 ^308,

其最小所能表示的小数为±5*10^-324,这两个边界值可以分别通过访问Number对象的 MAX_VALUE属性和MIN_VALUE属 性来获取。对于整数范围是从-2^53~2^53,包含边界值。超出此范围无法保证低位数字的精度。

2.1、算术运算

JavaScript提供了简单的+、-、*、/和%运算符,除此之外,对于复杂的运算可以使用Math对象(内置全局对象)的方法和常量实现。

Math 对象方法

 方法 描述
abs(x) 返回数的绝对值。
acos(x) 返回数的反余弦值。
asin(x) 返回数的反正弦值。
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x) 对数进行上舍入。
cos(x) 返回数的余弦。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
toSource() 返回该对象的源代码。
valueOf() 返回 Math 对象的原始值。

注意:由于JavaScript本身采用的数字表示法是二进制表示法,对于0.1这样简单的数字并不能精确表示,

我们可以看一个例子:

var x=.3-.2;
var y=.2-.1;
x==y         //==>false
x==.1        //==>false
y==.1        //==>true

对于这种问题的处理,应该使用大整数进行运算,避免小数的计算!

2.2、Infinity和NaN

算术运算时,若出现溢出、下溢或被零整除,程序不会报错,而是会返回一个特殊的无穷大的值,以infinity表示,对于负数以-Infinity表示,基于他们的运算永远返回Infinity(保留正负号)。

NaN表示非数字值,其本质上还是一个数字,但它和任何值都不相等,包括自身,对于NaN的判断可以使用如下方法:

var x=NaN;
x!=x;         //==>true 当且仅当x为NaN时才会返回true
isNaN(x);     //==>true 参数为NaN或非数字值时返回true
isFinite(x);  //==>false  参数不是NaN,Infinity或-INfinity时返回true
//顺便一提 -0与0是相等的
-0===0        //==>true

3、日期和时间

JavaScript提供了Date()构造函数,用于构造一个日期对象,可以通过对象中的方法获取相应的日期和时间。(后续介绍)

4、文本

JavaScript中通过字符串类型表示文本,字符串的长度是其所包含16位值的个数。

字符串的索引从零开始,空字符串长度为0。

4.1、字符串直接量

字符串直接量由单引号或双引号括起来的字符序列,单引号和双引号可以嵌套。

在ES5中,字符串直接量可以拆分成数行,每行必须以反斜线(\)结束 ,如果需要另起一行可以使用转义字符\n

"tow\nline";       //==>"tow//    line"
"one\
long\
line";             //==>"onelongline"

注意:字符串在JavaScript中是固定不变的(即上文提到过的不可变类型),使用字符串包装对象的内置方法修改字符串本质上返回的都是新字符串,原字符串不受影响!

5、模式匹配(正则表达式)

JavaScript中定义了RegExp()构造函数,用于创建文本匹配模式对象(称为正则表达式)

RegExp与Date类似属于JavaScript的特殊内置对象,语法较为复杂,这里不做详细介绍,仅介绍其字面量写法。

var pattern=/\d+/g;    //匹配所有包含一个或多个数字的实例    

6、布尔值

布尔值用于表示真假,只有两个值,true和false,通常用于控制语句(if)中。

在JavaScript中,只有以下值会被转为false:

  • undefined
  • null
  • 0,-0
  • NaN
  • “”   //空字符串

其他所有值,包括空数组和空对象都会转为true。

6.1、逻辑运算符

6.1.1、&&(and)运算符

当且仅当两个操作符都为真时返回true,当第一个值为false时,不会执行第二条语句,即俗称的短路

6.1.2、||(or)运算符

如果两个操作数其中之一为true时返回true,当第一个值为true时,第二条语句不会执行

6.1.3、!(not)运算符

对操作数取反,操作数为真时返回false,如果是假时返回true

7、包装对象

在使用字符串或数字等原始类型的方法时,有没有好奇为什么可以像对象类型一样使用?

那是因为在引用这些方法时,JavaScript会通过Number()或String()构造函数创建一个临时变量,这些方法就是定义在这些临时对象上的,这些临时对象在使用完成后就会自动销毁,因此对这些值进行操作是没有意义的.

当然你可以通过对象构造的方法显式构造包装对象,但构造出的值与原始类型值并不相同。

8、类型转换

附上类型转换表:

原始类型和对象类型 转换成String: 转换成Number 转换成Boolean 转换成Object
undefined "undefined" NaN false throws TypeError
null "null" 0 false throws TypeError
true "true" 1   new Boolean(true)
false "false" 0   new Boolean(false)
"" (empty string)   0 false new String("");Object("")
"1.2" (nonempty, numeric)   1.2 true new String("1.2");Object("1.2")
"one" (nonempty, non-numeric)   NaN true new String("one");Object("one")
0 "0"   false new Number(0);Object(0)
-0 "0"   false new Number(-0);Object(-0)
NaN "undefined"   false new Number(NaN);Object(NaN)
Infinity "Infinity"   true new Number(Infinity);Object(Infinity)
-Infinity "-Infinity"   true new Number(-Infinity);Object(-Infinity)
1 (finite, non-zero) "1"   true new Number(1);Object(1)
{} (any object)   NaN true  
[] (empty array) "" 0 true  
[9] (1 numeric elt) "9" 9 true  
['a'] (any other array) use join() method NaN true  
function(){} (any function "undefined" NaN true  

8.1、隐式转换

除了上述的转换方法之外,某些运算符会做隐式的类型转换。

x+""        //等价于String(x)
+x          //等价于Number,也可以写成x-0
!!x         //等价于Boolean(x)//数字转为字符串时控制输出的小数点或有效数字位数时,可以使用一下方法
//这三个方法都会根据位数进行四舍五入或填充0
var n=123456.789;
n.toFixed(0);    //"123456"
n.toFixed(2);    //"123456.79"
n.toExponential(1);    //"1.2e+5"
n.toExponential(3);    //"1.235e+5"
n.toPrecision(4);    //"1.235e+5"
n.toPrecision(7);    //"123456.8"//全局对象中提供了两个方法用于转换字符串为数字
parseInt("11",2);    //==>3 以二进制转换,当无法被转换时返回NaN
parseInt("0x11");    //==>17 以十六进制转换
parseInt("0x11",2);    //==>0 省略后面无法被解析的字符串
parseFloat(".1");    //==>0.1

初读犀牛书------第一天相关推荐

  1. 大咖发声 | 聊聊火爆前端圈的“犀牛书”

    今年是牛年,大家期盼已久的"犀牛书"<JavaScript权威指南>第7版的中文版也终于在牛年摆上书架,我觉得这可能就是所谓的冥冥中自有安排吧.众所周知,计算机类的技术 ...

  2. 敬天爱人 大道至简——初读《经营十二条》

    老板送了一本稻盛和夫的<经营十二条>让我看看,前段时间一直忙于应付考试与工作,直到今天才抽出时间好好研读了一番.从这本书里读到的第一印象就是日本人性格里特有的精神至上.团队意识.日本人强调 ...

  3. JavaScrpit 犀牛书第七版笔记

    JavaScrpit 犀牛书第七版笔记 挖个坑吧,JavaScript 犀牛书英文的第七版(JavaScript: The Definitive Guide, 7th Edition)其实在去年(20 ...

  4. 程序员搞开源,读什么书最合适?

    | 编辑:李佳阳 | 责编:王玥敏 1998 年,"开源"这一术语诞生于开放软件倡议书(the Open Software Initiative).最初,开源只是一个边缘化的活动, ...

  5. 程序员初入职场第一年—— 程序员羊皮卷 连载 13

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow <程序员羊皮 ...

  6. classes是什么意思怎么读_孩子几岁读什么书,怎么读,这篇全都告诉你

    文 | 米粒妈 (公众号 米粒妈爱分享) 阅读是回报率最好的教育投资.但阅读这件事学问特别大,孩子几岁读什么书,这里面的讲究太多了. 同样是坚持阅读,有的孩子花同样的时间和精力,能力和水平却远超其他孩 ...

  7. classes是什么意思怎么读_孩子几岁读什么书,怎么读,这篇全都告诉你!

    文 | 米粒妈 (公众号 米粒妈爱分享) 阅读是回报率最好的教育投资.但阅读这件事学问特别大,孩子几岁读什么书,这里面的讲究太多了. 同样是坚持阅读,有的孩子花同样的时间和精力,能力和水平却远超其他孩 ...

  8. 为什么一定要读南瓜书?

    南瓜书是经典"西瓜书"<机器学习>公式完全解析指南,2019年发布之初便荣登 GitHub Trending第 2,受到了读者的一致好评,并得到了 多名知乎.微博大V主 ...

  9. nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)

    nginx中的事件模块是一个很重要的模块,但这里作为初读,我们只简单看一下ngx_event的数据结构,至于模块和机制,留作之后再分析. 下面是结构体ngx_event_t的代码: typedef s ...

最新文章

  1. MySQL数据库:查看数据库性能常用命令
  2. leetcode 287. Find the Duplicate Number | 287. 寻找重复数(判断链表是否有环,并找到环的起点)
  3. vim如何自动补全,ycm配置
  4. KMP算法———模板
  5. 怎么使用计算机的移动与复制,Excel移动和公式的复制
  6. Java-Arrays数组操作
  7. magento权限设置
  8. 国仁老猫:新人怎么做好一场直播带货;首先需要明白以下几点即可。
  9. 第九周 项目三--稀疏矩阵的三元组表示的实现及应用
  10. 蓝桥杯嵌入式快速入门
  11. ssm搭建整合,这一篇你直接拷走就是一个搭好的框架,前后端可分离,可不分离
  12. Ubuntu中运行AppImage文件的方法
  13. Python可视化:中国环保股上市公司市值Top20强
  14. 基于全卷积Fully-Convolutional-Siamese-Networks的目标跟踪仿真
  15. 孔乙己终结者!GPT-4拿100美元自创业,还要让马斯克下岗
  16. 基于java的驾校驾照在线考试系统
  17. code combat计算机科学三第一关,Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学三)Ⅰ...
  18. Unity3D调用摄像头时的最高分辨率
  19. android怎么玩大头特效,安卓系统上抖音大头特效怎么弄?
  20. R语言:商业数据分析实例(2)【k-means, t-test】

热门文章

  1. 前NASA气象学家洛夫洛克宣判地球死刑
  2. java中repeat什么意思_repeat是什么意思_repeat的翻译_音标_读音_用法_例句_爱词霸在线词典...
  3. Head First HTML and CSS
  4. gpt.4.0-gpt 国内版
  5. 网关是什么,一文带你快速入门腾讯技术工程
  6. 最具投资价值榜第一!腾讯iOA斩获中国网络安全产业联盟CCIA双料大奖
  7. MAC安装jmeter以及JDK配置
  8. 计算机放音乐声音小在吗调,电脑放歌声音小怎么办
  9. Mysql面试之索引
  10. 有这5款开源软件,语音转文字很简单!