JavaScript编程语言

JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。

代码存在形式以及放置的位置

JavaScript存在的形式

<!-- 方式一文件引入 -->
<script src="JS文件"></script> <!-- 方式二页面中直接写 -->
<script>
Js代码内容
</script>

JavaScript放置的位置

  • HTML的head中

  • HTML的body代码块底部(推荐)

    由于Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部,那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。

    建议:非影响整个页面布局的js可以放在body中的最下位置;

例通过输入内容弹出alert框

<script>
function GetData() {
var i = document.getElementById("user")
alert(i.value);
}
</script>
<body>
<input type="text" id="user" />
<input type="button" value="点我" onclick="GetData();">
<script>
function GetData() {
var i = document.getElementById("user")
alert(i.value);
}
</script>
</body>

javascrip变量

JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量。
<script>
name = 'seven'; // 全局变量
function func(){
var name = "lin"; // var 局部变量
}
</script>

在JavaScript中的注释:

单行 //
多行 /*包过内容*/

基本数据类型

  • 原始类型

    • 数字
    • 字符串
    • 布尔值
  • 对象类型
    • "列表"数组
    • "字典"
    • ....

数字(Number)

JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。
将其他值转换为数字

parseInt(..)将某值转换成数字,不成功则NaN。

parseFloat(..)将某值转换成浮点数,不成功则NaN。

<script>
age = "18"; //定义一个变量的字符串 age = "18"
i = parseInt(age); //将字符串转化为数字
z = parseFloat(age); //将字符串转换为小数类型Float
</script>
特殊值:

NaN,非数字.可使用 isNaN(num) 来判断。

Infinity,无穷大.可使用 isFinite(num) 来判断。

字符串(String)

字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。

1.定义字符串并通过下标取出相应的值

a="zhangsan"
"zhangsan"
a.charAt(0)
"z"
a.charAt(1)
"h"
a.charAt(2)
"a"

2.字符串下标的截取(顾头不顾尾)

a="zhangsan"
a.substring(0,5)
"zhang"
a.substring(0,3)
"zha"

3.获取字符串的总长度;

a="zhangsan"
a.length
8

4.根据指定的字符串(空格),对内容切割为列表split;

a="zhang san li si"
"zhang san li si"
a.split(" ")
(4) ["zhang", "san", "li", "si"]
// 获取切割的前2个值
a.split(" ",2)
(2) ["zhang", "san"]

字符串其他常见方法:

obj.length                           长度

obj.trim()                           移除空白
obj.trimLeft()
obj.trimRight)
obj.charAt(n) 返回字符串中的第n个字符
obj.concat(value, ...) 拼接 和 "+" 一样效果
obj.indexOf(substring,start) 子序列位置(从前往后)
obj.lastIndexOf(substring,start) 子序列位置(从后往前)
obj.substring(from, to) 根据索引获取子序列
obj.slice(start, end) 切片
obj.toLowerCase() 大写
obj.toUpperCase() 小写
obj.split(delimiter, limit) 分割
obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效)
obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项,
$数字:匹配的第n个组内容;
$&:当前匹配的内容;
$`:位于匹配子串左侧的文本;
$':位于匹配子串右侧的文本
$$:直接量$符号

布尔类型(Boolean)

布尔类型仅包含真假,与Python不同的是其首字母小写

a=true
true
a=false
false

布尔类型判断的符号

  • == 比较值相等
  • != 不等于
  • === 比较值和类型相等
  • !=== 不等于
  • || 或
  • && 且

数组

JavaScript中的数组类似于Python中的列表

1.定义数组

a = [11,222,333,444]
(4) [11, 222, 333, 444]

2.获取数组的长度length

a = [11,222,333,444]
a.length
4

3.插入、删除或替换数组的元素splice

a = [11,222,333,444]
(4) [11, 222, 333, 444]
// a.splice(起始位置,删除1个数,要插入的值)
a.splice(1,1,99)
[222]
a
(4) [11, 99, 333, 444]
// a.splice(起始位置,删除0个数,要插入的值)在指定的位置增加值
a.splice(1,0,888)
[]
a
(5) [11, 888, 99, 333, 444]
// a.splice(起始位置,删除1个数)只指定删除个数,不指定增加值
a.splice(1,1)
[888]
a
(4) [11, 99, 333, 444]

4.切片(顾头不顾尾)

a
(4) [11, 99, 333, 444]
a.slice(1,3)
(2) [99, 333]

5.join在JS中是给数组按照指定的方式拼接(python中是给字符串使用的)

a
(4) [11, 99, 333, 444]
a.join("-")
"11-99-333-444"

6.将2个数组拼接到一起;

a=[11, 99, 333, 444]
(4) [11, 99, 333, 444]
b=["aa","bb","ccc","dddd"]
(4) ["aa", "bb", "ccc", "dddd"]
a.concat(b)
(8) [11, 99, 333, 444, "aa", "bb", "ccc", "dddd"]

常见功能:

obj.length          数组的大小

obj.push(ele)       尾部追加元素
obj.pop() 尾部获取一个元素
obj.unshift(ele) 头部插入元素
obj.shift() 头部移除元素
obj.splice(start, deleteCount, value, ...) 插入、删除或替换数组的元素
obj.splice(n,0,val) 指定位置插入元素
obj.splice(n,1,val) 指定位置替换元素
obj.splice(n,1) 指定位置删除元素
obj.slice( ) 切片
obj.reverse( ) 反转
obj.join(sep) 将数组元素连接起来以构建一个字符串
obj.concat(val,..) 连接数组
obj.sort( ) 对数组元素进行排序

字典

1.定义字典

a={"k1":"v1","k2":"v2","k3":"v3"}
{k1: "v1", k2: "v2", k3: "v3"}
a.k1
"v1"

定时器setInterval

格式

setInterval("执行的代码",间隔时间毫秒)

1.定义一个定时器,每2秒钟弹出一个alert框

<script>
// setInterval创建一个定时器,多久执行一次
// 第一个参数是要执行什么;
// 第二个参数多久执行一次;2000毫秒,2秒钟
setInterval("alert(123)",2000)
</script>

2.通过定时器中输出console.log信息

<script>
// function f1() 定义一个函数 f1
function f1() {
// 在浏览器Console窗口,打印输出内容一般用于打印招聘信息
var logs="这里是xxoo招聘,请把简历投放到xxx@ooo.com"
console.log(logs);
} // setInterval 定时器
setInterval("f1()",2000)
</script>

通过定时器setInterval实现轮播标签

1.定义一个div,设定一个id=i1

<div id="i1">欢迎大人物莅临指导!</div>

2.通过document.getElementById("i1")获取表情内容

tag = document.getElementById("i1")
<div id=?"i1">?欢迎大人物莅临指导!?</div>?
tag
<div id=?"i1">?欢迎大人物莅临指导!?</div>?

3.通过innerText获取标签内的内容(innerText可以获取内容也可以set内容)

content=tag.innerText
"欢迎大人物莅临指导!"
content
"欢迎大人物莅临指导!"

4.通过下标的截取,从新拼接字符串;将拼接字符串从新赋值给tag.innerText

f=content.charAt(0)
"欢"
l=content.substring(1,content.length)
"迎大人物莅临指导!"
new_content=l+f;
"迎大人物莅临指导!欢"
tag.innerText=new_content
"迎大人物莅临指导!欢"

实现效果(它不动我也挺无奈,这个锅要cnblogs背,放html页面试试吧!!)

欢迎大人物莅临指导!

实现代码

<body>
<div id="i1">欢迎大人物莅临指导!</div> <script>
function func() {
// 获取id为 i1 的标签
var tag=document.getElementById("i1");
// 获取标签内部的内容
var content=tag.innerText;
// 标签的第一个值
var f=content.charAt(0);
// 标签的第一个值后的所有值
var l=content.substring(1,content.length);
// 拼接新的字符串
var new_content = l+f;
// 将值从新赋给 tag.innerText
tag.innerText = new_content;
}
// 0.5秒执行一次
setInterval("func()",500)
</script>
</body>

通过定时器,页面显示当前时间

<body>
<div id="isj"></div> <script>
function currentDate() {
var da = new Date(); var year = da.getFullYear();
var month = da.getMonth()+1;
var day = da.getDate(); var hours = da.getHours();
var minutes = da.getMinutes();
var seconds = da.getSeconds(); var txt = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds; document.getElementById("isj").innerHTML = txt;
}
setInterval(currentDate,1000)
</script>
</body>

语句和异常

for循环语句

1.默认循环列表时获取的为下标;

b = ["aa", "bb", "ccc", "dddd"]
// var 定义的为局部变量
for(var i in b){
console.log(i)
}
0
1
2
3

2.通过下标值获取相应的值;

b = ["aa", "bb", "ccc", "dddd"]
// var 定义的为局部变量
for(var i in b){
// 通过下标获取值
console.log(b[i])
}
aa
bb
ccc
dddd

3.默认循环字典获取的是key值:

a = {k1: "v1", k2: "v2", k3: "v3"}
for(var i in a){
console.log(i)
}
k1
k2
k3

4.通过key获取相应的值:

a = {k1: "v1", k2: "v2", k3: "v3"}
for(var i in a){
console.log(a[i])
}
v1
v2
v3

5.通过表达式形式写for循环

for (var i=0;i<10;i++){

}

if条件语句

单条件语法:

if(条件){

}else{

}

多条件语法:

if(条件){

}else if(条件){

}else if(条件){

}else{

}

函数

基础函数

JavaScript中函数基本上可以分为一下三类:

1.普通函数

// 普通函数 function 函数名(形参){语句}
function func(arg){
return true;
}

2.匿名函数,没有名字的函数

setInterval(function(){
console.log(123);
},5000)

3.自执行函数,从上往下解释时候,自动执行

格式:

    (function(形参){
console.log(形参);
})(实参)

示例:

(function(arg){
console.log(arg);
})('123')

序列化

常用于用户向后台发送数据的时候,返回的值都为字符串,拿到字符串后需要反序列化将字符串转换为列表进行循环操作;
  • JSON.stringify(obj) 序列化
  • JSON.parse(str) 反序列化

1.将列表序列化为字符串

li=[11,22,222,333,444,555]
(6) [11, 22, 222, 333, 444, 555] str_li=JSON.stringify(li)
"[11,22,222,333,444,555]"

2.将字符串反序列化为列表

new_li = JSON.parse(str_li)
(6) [11, 22, 222, 333, 444, 555] new_li
(6) [11, 22, 222, 333, 444, 555]

转义

  • decodeURI( ) URl中未转义的字符
  • decodeURIComponent( ) URI组件中的未转义字符
  • encodeURI( ) URI中的转义字符
  • encodeURIComponent( ) 转义URI组件中的字符
  • escape( ) 对字符串转义
  • unescape( ) 给转义字符串解码
  • URIError 由URl的编码和解码方法抛出

1.将URL中的中文转换为%字符串

url="https://www.sogou.com/web?query=叨客厨子"
"https://www.sogou.com/web?query=叨客厨子"
new_url = encodeURI(url)
"https://www.sogou.com/web?query=%E5%8F%A8%E5%AE%A2%E5%8E%A8%E5%AD%90"

2.将%号字符串,转换为中文

decodeURI(new_url)
"https://www.sogou.com/web?query=叨客厨子"

3.将URL中的//也转换为%字符

a = encodeURIComponent(url)
"https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E5%8F%A8%E5%AE%A2%E5%8E%A8%E5%AD%90"

4.将%字符串转换回中文

decodeURIComponent(a)
"https://www.sogou.com/web?query=叨客厨子"

Date时间对象

获取日期和时间
getDate() 获取日
getDay () 获取星期
getMonth () 获取月(0-11)
getFullYear () 获取完整年份
getYear () 获取年
getHours () 获取小时
getMinutes () 获取分钟
getSeconds () 获取秒
getMilliseconds () 获取毫秒
getTime () 返回累计毫秒数(从1970/1/1午夜)

时间常见的格式

var D = new Date()
Mon Oct 16 2017 00:05:15 GMT+0800 (中国标准时间) D.toISOString();
"2017-10-15T16:05:15.267Z" D.toJSON()
"2017-10-15T16:05:15.267Z" D.toLocaleDateString()
"2017/10/16" D.toLocaleString()
"2017/10/16 上午12:05:15" D.toTimeString()
"00:05:15 GMT+0800 (中国标准时间)" D.getFullYear()+"-"+(D.getMonth()+1)+"-"+(D.getDate())
"2017-10-16"

作用域

  1. JavaScript以函数作为作用域;
  2. 函数的作用域在函数未被调用之前,已经创建;
  3. 函数的作用域存在作用域链,并且也是在被调用之前就创建;
  4. 函数内局部变量,会提前声明,但不会提前赋值;

JavaScript编程语言的更多相关文章

  1. 浅谈 JavaScript 编程语言的编码规范

    对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...

  2. JavaScript:最烂与最火

    ============================================================================== 一.世无英雄,遂使竖子成名 1 Web客户 ...

  3. 2014年最火的 21个JavaScript 框架

    下面,我们将会介绍 2014 年最火的 21 款JavaScript 框架,专为前端开发者准备的哦:)众所周知, JavaScript 框架是 JavaScript编程语言最棒的特性之一. JavaS ...

  4. Day15 HTML补充、初识JavaScript

    一.上节回顾 上节回顾: HTML 头部信息:编码.title.style.link(导入css文件) 身体: 内联 块级 --->inline-block(既有内联效果又有块级效果) a标签: ...

  5. 编写可维护的javascript代码---开篇(介绍自动报错的插件)

    文章开篇主要推荐了2款检测编程风格的工具: JSLint和JSHint: jsLint是由Douglas Crockford创建的.这是一个通用的javascript代码质量检测工具,最开始JSLin ...

  6. 【JavaScript脚本编程技术详解-----(一)】

    首先说明,本系列教程是写给有一定的JavaScript编程基础的同学看的,最好还有其它的编程语言经验,因为里面可能涉及一些其它的程序设计语言写的源代码,这都是我自己总结的经验,我喜欢在学习一门新的编程 ...

  7. 全栈必备 JavaScript基础

    1995年,诞生了JavaScript语言,那一年,我刚刚从大学毕业.在今年RedMonk 推出的2017 年第一季度编程语言排行榜中,JavaScript 排第一,Java 第二,Python 反超 ...

  8. 使用JavaScript和D3.js实现数据可视化

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由独木桥先生发表于云+社区专栏 介绍 D3.js是一个JavaScript库.它的全称是Data-Driven Documents(数据 ...

  9. JavaScript 原型的深入指南

    摘要: 理解prototype. 原文:JavaScript 原型的深入指南 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 不学会怎么处理对象,你在 JavaScript 道路就就走 ...

随机推荐

  1. 【Ubuntu】如何修改IP

    前几天有幸捣鼓了一下Ubuntu系统,和Linux系统差不多,在这里说说如何修改IP           1,首先使用命令ifconfig查看当前IP,如图           2,编辑文件,输入命令 ...

  2. Scala 继承

    1. 继承 Scala 通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的) 可以添加自己需要的新方法和 ...

  3. 从运维角度来分析mysql数据库优化的一些关键点【转】

    概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...

  4. Liunx之Centos系统无人值守全自动化安装

    作者:邓聪聪 定制centos6.8自动安装ISO光盘 安装系统为centos6.8 (base server),安装方式为全新安装 使用ext4分区格式 安装前可以交互输入root密码,主机名,分区 ...

  5. boost 文件系统

    第 9 章 文件系统 目录 9.1 概述 9.2 路径 9.3 文件与目录 9.4 文件流 9.5 练习  该书采用 Creative Commons License 授权 9.1. 概述 库 Boo ...

  6. Java文件复制

    主要是工作代码,无解释. /** * 将文件或文件夹source复制到dest * <br>目标文件检测: * <br> a.当文件不存在时:需要创建文件 * <br&g ...

  7. RF运行脚本报错:WebDriverException: Message: unknown error: call function result missing

    原因:浏览器驱动与浏览器版本不对应

  8. mybatis打印SQL日志

    在配置的log4j输出时,不能打印SQL信息,在mybatis-config.xml中添加如下配置即可 <settings> <setting name="logImpl& ...

  9. LabVIEW 波形图表显示多条曲线

    如何在波形图表中显示多条曲线呢? 首先看看波形图表的说明,请查看labVIEW 帮助 图 1 波形图表控件的即时帮助信息   关键就在绑定多个点. 图 2 利用捆绑函数将多个信号捆绑成簇   图 3 ...

  10. git 创建分支