JavaScript学习笔记--语法
代码风格:
- 每句结尾不用加分号;
- 单行注释用//,多行注释用/*...需要注释掉的代码....*/
- 严格区分大小写
- 优雅的代码需要注意锁进
基础知识:
Number:JavaScript不区分整数和浮点数,统一用Number表示。十六进制用0x前缀和0-9,a-f表示。
字符串:以单引号'或双引号"括起来
\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\。多行字符串用反引号 ` ... ` 表示。
> `这是一个
多哈
字符串`
< "这是一个
多哈
字符串"
如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:
> 'I\'m OK!'
< "I'm OK!"
ASCII字符可以以\x##表示十六进制
> '\x41'
< "A"
用\u####表示一个Unicode字符
> '\u4e2d\u6587'
< "中文"
多个字符串连接起来,可以用'+变量+'号连接。或者用 反引号`....${变量}...`和 连接。
> var name = '小米'
> var age = 20
> var message = '你好,'+name+',你今年'+age+'岁了'
> console.log(message)
[Log] 你好,小米,你今年20岁了
----------------------------------------------
> var name = '小米'
> var age = 18
> var message = `你好,${name},你今年${age}岁了!`
> console.log(message)
[Log] 你好,小米,你今年18岁了!
----------------------------------------
或者直接 "你好,"+name+",你今年"+age+"岁了"
var message = '你好,'+name+',你今年'+age+'岁了'
都可以。
> message.length
< 14
> message[0]
< "你"
> message[13]
< "!"
// undefined 超出范围的索引不会报错,但一律返回undefined
> message[14]
< undefined
字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果
> message[14] = 'kkk'
< "kkk"
> console.log(message)
[Log] 你好,小米,你今年18岁了!
字符串是不可变的.下面这些方法本身不会改变原有字符串的内容,而是返回一个新字符串
toUpperCase()把一个字符串全部变为大写。
toLowerCase()把一个字符串全部变为小写。
indexOf()会搜索指定字符串出现的位置。
substring()返回指定索引区间的子串。
match() 方法 查找字符串中特定的字符,并且如果找到的话,则返回这个字符。没找到返回null。ex: var str="Hello world!" ; str.match("world") 返回world
replace() 方法在字符串中用某些字符替换另一些字符。ex: var str="Visit Microsoft!"; str.replace("Microsoft","W3School") 返回Visit W3School!
> var test = 'Hello'
> test.toUpperCase()
< "HELLO"
> test.toLowerCase()
< "hello"
> var test1 = test.toUpperCase()
> console.log(test1)
[Log] HELLO
> console.log(test)
[Log] Hello
> var sTest = test+'hello'
> console.log(sTest)
[Log] Hellohello
> sTest.indexOf('llo')
< 2 //从索引2开始出现
> sTest.indexOf('HELLO')
< -1 // 没有找到指定的子串,返回-1
> sTest.substring(0,3)
< "Hel" // 从索引0开始到3(不包括3)
> sTest.substring(3)
< "lohello" //从索引3开始到结束,包括3
布尔值:
true、false
比较运算符:
JavaScript允许对任意数据类型做比较。
false == 0; // true
false === 0; // false
要特别注意相等运算符==。JavaScript在设计时,有两种比较运算符:
第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); // true
最后要注意浮点数的相等比较:
1 / 3 === (1 - 2 / 3); // false
浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
null和undefined
null表示“空”,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串。
用null表示一个空的值,而undefined表示值未定义。大多数情况下,用null。undefined仅仅在判断函数参数是否传递的情况下有用。
数组
两种创建方式。更多的用第二种
new Array(1, 2, 3); // 创建了数组[1, 2, 3]
var arr = [1, 2, 3.14, 'Hello', null, true]
arr[0]; // 返回索引为0的元素,即1
arr[5]; // 返回索引为5的元素,即true
arr[6]; // 索引超出了范围,返回undefined
要取得Array的长度,直接访问length属性。 arr.length; // 6
Array可以通过索引把对应的元素修改为新的值,因此,对Array的索引进行赋值会直接修改这个Array:
var arr = ['A', 'B', 'C'];
arr[1] = 99;
arr; // arr现在变为['A', 99, 'C']
请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:
var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']
arr.indexOf('A'); // 元素A的索引为0
arr.indexOf(30); // 元素30没有找到,返回-1
Array也可以通过indexOf()来搜索一个指定的元素的位置
slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array。 slice()的起止参数包括开始索引,不包括结束索引。如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array。
push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉。
往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉。
sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序。
reverse()把整个Array的元素给反转。
splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素。单词英语意思:粘接
concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array。concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里。
join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串。
多维数组:数组的某个元素又是一个Array,则可以形成多维数组。
> var arr = ["B", "C", "D", "E", "F", "G"] ;
arr.sort(); //排序
arr;
< ["B", "C", "D", "E", "F", "G"]
> arr.reverse() //反转
< ["G", "F", "E", "D", "C", "B"]
> arr.splice(2,3,'s',2) //既删除又添加
> arr
< ["G", "F", "s", 2, "B"]
> arr.splice(2,2) //只删除,不添加
> arr
< ["G", "F", "B"]
> arr.splice(2,0,'a','b') //只添加,不删除
> arr
< ["G", "F", "a", "b", "B"] (5)
> var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]); //Arr和另一个Array连接,自动把Array拆开,然后全部添加到新的Array里。
arr;
< ["A", "B", "C"]
> added
< ["A", "B", "C", 1, 2, 3]
> added
< ["A", "B", "C", 1, 2, 3]
> added.join('-') //将数组元素连接返回字符串,如果Array的元素不是字符串,将自动转换为字符串后再连接。
< "A-B-C-1-2-3"
> added[8] = null
> added.join('-')
< "A-B-C-1-2-3---"
>added[6] = '\x41'
> added.join('-')
< "A-B-C-1-2-3-A--"
对象
JavaScript的对象是一组由键-值组成的无序集合。
要获取一个对象的属性,我们用对象变量.属性名 或者 对象变量['属性名']的方式。
delete 属性
in 属性
toString 属性。toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性
判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法
> var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
};
> xiaohong['middle-school'];//对象变量['属性名']
< "No.1 Middle School"
> xiaohong['name']; //对象变量['属性名']
< "小红"
xiaohong.name; //对象变量.属性名
< "小红"
> delete xiaohong.name //delete 属性--删除
> xiaohong
< {middle-school: "No.1 Middle School"}
> 'name' in xiaohong //in 属性,返回true或者false
< false
> 'middle-school' in xiaohong
< true
> 'toString' in xiaohong //toString 属性,true
< true
> xiaohong.hasOwnProperty('middle-school')
< true
> xiaohong.hasOwnProperty('toString')
< false
变量
变量名是大小写英文、数字、$和_的组合,且不能用数字开头。变量名也不能是JavaScript的关键字,如if、while等。申明一个变量用var语句。使用等号=对变量进行赋值
strict模式(精确模式)
申明一个变量必须用var语句。在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。
启用strict模式的方法是在JavaScript代码的第一行写上:
'use strict'
JavaScript学习笔记--语法的更多相关文章
- JavaScript学习笔记--语法二
条件判断与C语言一样 两种循环.for 循环和 while 循环,JavaScript不区分整数和浮点数,统一用Number表示,所以不是 int i var x = 0; var i; for (i ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(4——关闭/getter/setter)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- Java程序猿的JavaScript学习笔记(1——理念)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- JavaScript:学习笔记(9)——Promise对象
JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...
- JavaScript:学习笔记(5)——箭头函数=>以及实践
JavaScript:学习笔记(5)——箭头函数=>以及实践 ES6标准新增了一种新的函数:Arrow Function(箭头函数).本文参考的链接如下: MDN箭头函数:https://dev ...
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- js中如何把字符串转化为对象、数组示例代码
很明显是一个对象,但如何把文本转为对象呢.使用eval();注意一定要加括号,否则会转换失败 把文本转化为对象 var test='{ colkey: "col", colsinf ...
- 关于Unity的两种调试方法
Unity的两种调试方法 1.Debug.Log()输出语句调试,平时经常用这个 2.把MonoDevelop和Unity进行连接后断点调试 先把编辑器选择为MonoDevelop,Edit----& ...
- Go指南练习_rot13Reader
https://tour.go-zh.org/methods/23 一.题目描述 有种常见的模式是一个 io.Reader 包装另一个 io.Reader,然后通过某种方式修改其数据流. 例如,gzi ...
- 手动升级11.2.0.1的rac数据库到11.2.0.4
① 关闭两个节点上的数据库 crsctl stop resource ora.ORA11G.db ② 命令行单节点启动数据库, 注意这里的SQLPLUS 一定是升级后的软件地址 sqlplus / a ...
- mongodb查询数据库中某个字段中的值包含某个字符串的方法
正则表达式最能解决: 例如: db.getCollection(.*$/}) 这里主要是注意正则表达式要写对,该转义的注意转义,否则报错.
- glob通配符
描述glob是shell使用的路径匹配符,类似于正则表达式,但是与正则表达式不完全相同.在linux操作中如文件匹配等等其实已经使用了glob通配符.由于其在路径匹配方面的强大,其他语言也有相应的实现 ...
- [Python] 02 - String
字符串 string 一.基本性质 不变性 Immutability 要变就 --> list --> string 二.功能函数 功能函数 S = 'Spam" S.find( ...
- 使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化
一.搭建SSH方向代理 准备: 局域网主机(虚拟主机): 192.168.6.233 CentOS 6.7 阿里云服务器:120.25.68.60 CentOS 6.7 1. 阿里云服务器12 ...
- 【代码审计】XYHCMS V3.5URL重定向漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- java保存动态代理生成的类的class文件
启动时加: -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true