扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
格式化的话感觉可以使用firefox来实现,在firefox的开发者工具中有一个选项,叫美化原代码, 这样就直接格式化了js代码
创新互联是一家专注于网站设计制作、成都网站设计与策划设计,项城网站建设哪家好?创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:项城等地区。项城做网站价格咨询:18982081108
美化后
[img]!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ""
html xmlns=""
head
meta http-equiv="Content-Type" content="text/html; charset=utf-8" /
meta name="robots" content="all" /
titlejs/title
script language="javascript"
var str="1,02.4"; //直接定义一字符串(可设置为变量)
var strs= new Array(); //定义一数组
strs=str.split(""); //字符分割
var Num="";
for (i=0;istrs.length ;i++ )
{
var regs = /\d/;
if(regs.test(strs[i])){
Num+=strs[i];
}
}
document.write(Num);
/script
/head
body
/body
/html
js 可以读数据库 // JavaScript Document
var ServerIP="127.0.0.1";var conn,framePath,Style;
function dukin_conn(){
var datasource="数据库地址";
var filePath= window.location.href;
framePath=filePath.split("/frame")[0];
filePath=filePath.substring(8); //去掉
filePath=filePath.split("/frame")[0];
datasource=filePath+"/db/"+datasource; try {
conn = new ActiveXObject("ADODB.Connection");
conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+datasource);
} catch (errer) {
alert(errer.description);
}
return true
}function conn_close(conn){
conn.close;
conn=null;
}function rs_close(rs){
rs.close;
rs=null;
}var request=req()
function req(){
var ocar=new Object;
ocar.mark="读取地址栏地址";
ocar.querystring=function showcolor(ret){
var s = window.location.search.substr(1);
var aryVars = s.split('');
for(var i=0;iaryVars.length;i++)
{
var aryPair = aryVars[i].split("=");
if (aryPair[0]==ret){return aryPair[1];i=aryVars+1;}
}
}
return ocar;
} var S=request.querystring("S");
if (S==null){window.location.href="../index.html";}
dukin_conn();
//连接数据库
var sc = new ActiveXObject("ADODB.Recordset");
var sql="select * from [News_smallclass] where [smallclassID]="+S;
sc.open(sql, conn, 1,1 );
if (sc.recordcount1) {alert("地址错误");window.location.href="../index.html";}
var newsid=""+sc("id")+""; //以前用网站转CD时作的一个东东.核心部分就是这个,需要的话我可以把我作的东西发给你.不过没有作完 hehe
JavaScript简介:
Javacript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言。你可以利用Javacript轻易的做出亲切的欢迎讯息、漂亮的数字钟、有广告效果的跑马灯及简易的选举,还可以显示浏览器停留的时间。让这些特殊效果提高网页的互动性、提供亲切的服务。
由来
谈到JavaScript的历史,首先就得介绍[网景](Netscape)这家公司,相信很多人使用过Netscape浏览器来浏览网页,这家公司在设计浏览器的时候,一方面为了辅助本身发展的一种名为LiveWire的程式,另一方面为了提高网页设计的互动性,所以发展了LiveScript这个电脑语言。
那JavaScript和LiveScript有什么关系呢?在Netscape发展LiveScript的同时,另一家名为[升阳](Sun)的公司也正在发展Java语言,为了辅助Java的网页程式方面的设计,所以这两家公司进行合作,共同发展LiveScript语言,并且将LiveScript语言改名为Javacript,这就是Javacript的由来。
JavaScript刚开始时仅应用在Netscape浏览器,不过随着使用JavaScript制作网页的人愈来愈多,微软的IE浏览器也提供了新功能,现在可以在IE浏览器上看到JavaScript的效果了。
JavaScript和Java的差别
JavaScript和Java的差别究竟在哪儿呢?虽然名称很相似,而且都是在Internet和WWW盛行之下,所发展出为的两种提供网页程式设计的语言,但是却有很大的差异。前面介绍过JavaScript的前身是网景(Netscape)公司发展的Live Script语言,直到和升阳(Sun)公司合作之后,才改名为JavaScript,而Java也是由升阳公司发展出来的,所以名字才会这么相似。尽管如此,JavaScript和Java仍然是不同的语言。我们整理出以下四点帮助你了解两者的差异:
1、JavaScript是一种象文件一样的描述语言,透过浏览器就可以直接执行;而Java像正统的程式语言(如C/C++)一样,必须先进行编绎和连结等动作才可执行。
2、JavaScript必须编写在HTML文件中,直接查看网页的原始码,就可以看到JavaScript程式,所以没有保护,任何人都可以透过HTML文件复制程式;而Java应用在网页的程式称为Java Applet(Applet是[小程式]的意思),是和HTML文件分开的。
3、JavaScript的结构较为自由松散,譬如,程式中使用的变数前并不是需要明确的定义,而Java和正统的程式语言一样,结构较为严谨。
4、JavaScript不具有读写档案及网络控制等功能,Java则有提供这些功能,但是JavaScript在网页内容的控制和互动性方面,可算是最方便快捷的。
JavaScript的功能
显示信息提示
许多网站在你一连上时,画面上会先出现一个欢迎讯息对话盒,不但和你打招呼,还会发布一些重要讯息
显示日期时间
某些网页会显示目前的日期和时间,可能你会觉得有点神奇,怎么浏览器会知道目前的时间呢?这也是JavaScript提供的功能,它可以侦测你的电脑目前的时间,并且显示在网页中。
显示更新日期
许多网页会公告最新更新日期让大家知道,Java Scirpt可以自动侦测网页修改的日期,让你省去在每次修改网页时就得修改日期的动作。
跑马灯文字
让你可以方便显示较长的讯息,又不占去大块的版面空间。
按钮变化效果
当你移动滑鼠游到左边的按钮上时,按钮便会变成色,在浏览器下方状态列上也会显示出相关文字,这也是利用JavaScript制作的动态效果。
文章出处:
今天小编要跟大家分享的文章是关于Web前端工程师应该知道的JavaScript使用小技巧。任何一门技术在实际中都会有一些属于自己的小技巧。同样的,在使用JavaScript时也有一些自己的小技巧,只不过很多时候有可能容易被大家忽略。而在互联网上,时不时的有很多同行朋友会总结(或收集)一些这方面的小技巧。
今天在这篇文章中,小编会整理一些大家熟悉或不熟悉的有关于JavaScript的小技巧,希望能够对大家的学习和工作有所帮助。
一、数组
先来看使用数组中常用的一些小技巧。
01、数组去重
ES6提供了几种简洁的数组去重的方法,但该方法并不适合处理非基本类型的数组。对于基本类型的数组去重,可以使用...new
Set()来过滤掉数组中重复的值,创建一个只有唯一值的新数组。
constarray=[1,1,2,3,5,5,1]
constuniqueArray=[...newSet(array)];
console.log(uniqueArray);
Result:(4)[1,2,3,5]
这是ES6中的新特性,在ES6之前,要实现同样的效果,我们需要使用更多的代码。该技巧适用于包含基本类型的数组:undefined、null、boolean、string和number。如果数组中包含了一个object,function或其他数组,那就需要使用另一种方法。
除了上面的方法之外,还可以使用Array.from(newSet())来实现:
constarray=[1,1,2,3,5,5,1]
Array.from(newSet(array))
Result:(4)[1,2,3,5]
另外,还可以使用Array的.filter及indexOf()来实现:
constarray=[1,1,2,3,5,5,1]
array.filter((arr,index)=array.indexOf(arr)===index)
Result:(4)[1,2,3,5]
注意,indexOf()方法将返回数组中第一个出现的数组项。这就是为什么我们可以在每次迭代中将indexOf()方法返回的索引与当索索引进行比较,以确定当前项是否重复。
02、确保数组的长度
在处理网格结构时,如果原始数据每行的长度不相等,就需要重新创建该数据。为了确保每行的数据长度相等,可以使用Array.fill来处理:
letarray=Array(5).fill('');
console.log(array);
Result:(5)["","","","",""]
03、数组映射
不使用Array.map来映射数组值的方法。
constarray=[
{
ame:'大漠',
email:'w3cplus@#'
},
{
ame:'Airen',
email:'airen@#'
}
]
constname=Array.from(array,({name})=name)
Result:(2)["大漠","Airen"]
04、数组截断
如果你想从数组末尾删除值(删除数组中的最后一项),有比使用splice()更快的替代方法。
例如,你知道原始数组的大小,可以重新定义数组的length属性的值,就可以实现从数组末尾删除值:
letarray=[0,1,2,3,4,5,6,7,8,9]
console.log(array.length)
Result:10
array.length=4
console.log(array)
Result:(4)[0,1,2,3]
这是一个特别简洁的解决方案。但是,slice()方法运行更快,性能更好:
letarray=[0,1,2,3,4,5,6,7,8,9];
array=array.slice(0,4);
console.log(array);
Result:[0,1,2,3]
05、过滤掉数组中的falsy值
如果你想过滤数组中的falsy值,比如0、undefined、null、false,那么可以通过map和filter方法实现:
constarray=[0,1,'0','1','大漠','#',undefined,true,false,null,'undefined','null',NaN,'NaN','1'+0]
array.map(item={
returnitem
}).filter(Boolean)
Result:(10)[1,"0","1","大漠","#",true,"undefined","null","NaN","10"]
06、获取数组的最后一项
数组的slice()取值为正值时,从数组的开始处截取数组的项,如果取值为负整数时,可以从数组末属开始获取数组项。
letarray=[1,2,3,4,5,6,7]
constfirstArrayVal=array.slice(0,1)
Result:[1]
constlastArrayVal=array.slice(-1)
Result:[7]
console.log(array.slice(1))
Result:(6)[2,3,4,5,6,7]
console.log(array.slice(array.length))
Result:[]
正如上面示例所示,使用array.slice(-1)获取数组的最后一项,除此之外还可以使用下面的方式来获取数组的最后一项:
console.log(array.slice(array.length-1))
Result:[7]
07、过滤并排序字符串列表
你可能有一个很多名字组成的列表,需要过滤掉重复的名字并按字母表将其排序。
在我们的例子里准备用不同版本语言的JavaScript
保留字的列表,但是你能发现,有很多重复的关键字而且它们并没有按字母表顺序排列。所以这是一个完美的字符串列表(数组)来测试我们的JavaScript小知识。
varkeywords=['do','if','in','for','new','try','var','case','else','enum','null','this','true','void','with','break','catch','class','const','false','super','throw','while','delete','export','import','return','switch','typeof','default','extends','finally','continue','debugger','function','do','if','in','for','int','new','try','var','byte','case','char','else','enum','goto','long','null','this','true','void','with','break','catch','class','const','false','final','float','short','super','throw','while','delete','double','export','import','native','public','return','static','switch','throws','typeof','boolean','default','extends','finally','package','private','abstract','continue','debugger','function','volatile','interface','protected','transient','implements','instanceof','synchronized','do','if','in','for','let','new','try','var','case','else','enum','eval','null','this','true','void','with','break','catch','class','const','false','super','throw','while','yield','delete','export','import','public','return','static','switch','typeof','default','extends','finally','package','private','continue','debugger','function','arguments','interface','protected','implements','instanceof','do','if','in','for','let','new','try','var','case','else','enum','eval','null','this','true','void','with','await','break','catch','class','const','false','super','throw','while','yield','delete','export','import','public','return','static','switch','typeof','default','extends','finally','package','private','continue','debugger','function','arguments','interface','protected','implements','instanceof'];
因为我们不想改变我们的原始列表,所以我们准备用高阶函数叫做filter,它将基于我们传递的回调方法返回一个新的过滤后的数组。回调方法将比较当前关键字在原始列表里的索引和新列表中的索引,仅当索引匹配时将当前关键字push到新数组。
最后我们准备使用sort方法排序过滤后的列表,sort只接受一个比较方法作为参数,并返回按字母表排序后的列表。
在ES6下使用箭头函数看起来更简单:
constfilteredAndSortedKeywords=keywords
.filter((keyword,index)=keywords.lastIndexOf(keyword)===index)
.sort((a,b)=a
这是最后过滤和排序后的JavaScript保留字列表:
console.log(filteredAndSortedKeywords);
Result:['abstract','arguments','await','boolean','break','byte','case','catch','char','class','const','continue','debugger','default','delete','do','double','else','enum','eval','export','extends','false','final','finally','float','for','function','goto','if','implements','import','in','instanceof','int','interface','let','long','native','new','null','package','private','protected','public','return','short','static','super','switch','synchronized','this','throw','throws','transient','true','try','typeof','var','void','volatile','while','with','yield']
08、清空数组
如果你定义了一个数组,然后你想清空它。通常,你会这样做:
letarray=[1,2,3,4];
functionemptyArray(){
array=[];
}
emptyArray();
但是,这有一个效率更高的方法来清空数组。你可以这样写:
letarray=[1,2,3,4];
functionemptyArray(){
array.length=0;
}
emptyArray();
09、拍平多维数组
使用...运算符,将多维数组拍平:
10、从数组中获取最大值和最小值
可以使用Math.max和Math.min取出数组中的最大小值和最小值:
constnumbers=[15,80,-9,90,-99]
constmaxInNumbers=Math.max.apply(Math,numbers)
constminInNumbers=Math.min.apply(Math,numbers)
console.log(maxInNumbers)
Result:90
console.log(minInNumbers)
Result:-99
另外还可以使用ES6的...运算符来完成:
constnumbers=[1,2,3,4];
Math.max(...numbers)
Result:4
Math.min(...numbers)
Result:1
二、对象
在操作对象时也有一些小技巧。
01、使用...运算符合并对象或数组中的对象
同样使用ES的...运算符可以替代人工操作,合并对象或者合并数组中的对象。
//合并对象
constobj1={
ame:'大漠',
url:'#'
}
constobj2={
ame:'airen',
age:30
}
constmergingObj={...obj1,...obj2}
Result:{name:"airen",url:"#",age:30}
//合并数组中的对象
constarray=[
{
ame:'大漠',
email:'w3cplus@#'
},
{
ame:'Airen',
email:'airen@#'
}
]
constresult=array.reduce((accumulator,item)={
return{
...accumulator,
[item.name]:item.email
}
},{})
Result:{大漠:"w3cplus@#",Airen:"airen@#"}
02、有条件的添加对象属性
不再需要根据一个条件创建两个不同的对象,以使它具有特定的属性。为此,使用...操作符是最简单的。
constgetUser=(emailIncluded)={
return{
ame:'大漠',
blog:'w3cplus',
...emailIncluded{email:'w3cplus@#'}
}
}
constuser=getUser(true)
console.log(user)
Result:{name:"大漠",blog:"w3cplus",email:"w3cplus@#"}
constuserWithoutEmail=getUser(false)
console.log(userWithoutEmail)
Result:{name:"大漠",blog:"w3cplus"}
03、解构原始数据
你可以在使用数据的时候,把所有数据都放在一个对象中。同时想在这个数据对象中获取自己想要的数据。
在这里可以使用ES6的Destructuring特性来实现。比如你想把下面这个obj中的数据分成两个部分:
constobj={
ame:'大漠',
blog:'w3cplus',
email:'w3cplus@#',
joined:'2019-06-19',
followers:45
}
letuser={},userDetails={}
({name:user.name,email:user.email,...userDetails}=obj)
{name:"大漠",blog:"w3cplus",email:"w3cplus@#",joined:"2019-06-19",followers:45}
console.log(user)
Result:{name:"大漠",email:"w3cplus@#"}
console.log(userDetails)
Result:{blog:"w3cplus",joined:"2019-06-19",followers:45}
04、动态更改对象的key
在过去,我们首先必须声明一个对象,然后在需要动态属性名的情况下分配一个属性。在以前,这是不可能以声明的方式实现的。不过在ES6中,我们可以实现:
constdynamicKey='email'
letobj={
ame:'大漠',
blog:'w3cplus',
[dynamicKey]:'w3cplus@#'
}
console.log(obj)
Result:{name:"大漠",blog:"w3cplus",email:"w3cplus@#"}
05、判断对象的数据类型
使用Object.prototype.toString配合闭包来实现对象数据类型的判断:
constisType=type=target=`[object${type}]`===Object.prototype.toString.call(target)
constisArray=isType('Array')([1,2,3])
console.log(isArray)
Result:true
上面的代码相当于:
functionisType(type){
returnfunction(target){
return`[object${type}]`===Object.prototype.toString.call(target)
}
}
isType('Array')([1,2,3])
Result:true
或者:
constisType=type=target=`[object${type}]`===Object.prototype.toString.call(target)
constisString=isType('String')
constres=isString(('1'))
console.log(res)
Result:true
06、检查某对象是否有某属性
当你需要检查某属性是否存在于一个对象,你可能会这样做:
varobj={
ame:'大漠'
}
if(obj.name){
console.l
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流