jQuery中attr()与prop()的区别

thbcm阅读(208)

前提

在 jQuery 里,我们要获取一个标签元素的属性,可以用 attr()方法或者 prop()方法 ,那么两者有什么区别呢?

jQuery attr() 方法 和 prop() 方法

  • attr() ​方法设置或返回被选元素的属性值。
  • prop()​ 方法设置或返回被选元素的属性和值。

注:单纯从定义看的话,两个方法的作用都是一样的。而且用法也都差不多,如下所示。

作用一:返回被选元素的属性值。语法如下:

$(selector).attr(attribute)
$(selector).prop(property)

作用二:设置被选元素的属性和值。语法如下:

$(selector).attr(attribute,value)
$(selector).prop(property,value)

作用三:设置多个属性和值。语法如下:

$(selector).attr( {attribute:value, attribute:value ...} ) //对象的写法,键值对
$(selector).prop( {property:value, property:value,...} ) //对象的写法,键值对

作用四:使用函数设置属性和值。语法如下:(平时很少用到)

//第二个参数:规定返回要设置的属性值的函数。
/*该函数包括两个参数:
* index - 检索集合中元素的 index 位置。
* oldvalue / currentvalue - 检索被选元素的当前属性值。
*/
$(selector).attr(attribute,function(index,oldvalue))
$(selector).prop(property,function(index,currentvalue))

我们会发现:

  • 两个方法的用法都如出一辙,只是方法名称存在差异。一个是 attr,一个是 prop。
  • attr 的 全拼是 attribute。 prop 的全拼是 property。它们是两个不同的单词,虽说都有 属性 的意思,但其中的寓意必然不一样。

property 和 attribute 的 区别

  • property​ n. 属性,性质,性能;财产;所有权
  • attribute​ n. 属性;特质

由此可见,两者非常容易混淆,因为在中文上的翻译都特别接近。但实际上,它们两个是不同的东西,属于不同的范畴。

  • 深究它们的中文含义,我们可以将 attribute 理解为 “特性” ,而将 property 理解为 “属性”。
  • 显而易见,一个是 属性,一个是特性。肯定不一样了。
  • 如果你百度 “属性” 关键字的话,你会发现,属性 对应的英文直接就是 property。而且百度含义对 “属性” 的 详细释义 是:指事物本身固有的不可缺少的性质。。

现在,我们知道了:

  • property​ 属性。它是与生俱来的,并不是后天赋予的。比如说,某些对象在定义时就具有某一些属性。
  • attribute​ 特性。本身没有的,后天赋予的。比如说,某些对象在创建后,自定义赋予的一些属性。

对应到 js 中就是:

  • property​ 是 DOM 中的属性,是 JavaScript 里的对象;
  • attribute ​是 HTML 标签上的特性(属性),它的值只能够是字符串;

对应到 jQuery 中就是:

  • 对于 HTML 元素本身就带有的固有属性,或者说 W3C 标准里就包含有这些属性,更直观的说法就是,编辑器里面可以智能提示出来的一些属性,如:src、href、value、class、name、id等。在处理时,使用 prop() 方法。
  • 对于 HTML 元素我们自定义的 DOM 属性,即元素本身是没有这个属性的,如:data-*。在处理时,使用 attr() 方法。

attr() 方法 和 prop() 方法 的返回值

  • $(eleStr).attr()
<img src="/smile.jpg"/>
<button>获取图像的 class 属性值</button>
12
$("button").click(function(){
  console.log( $("img").attr("class") );//如果属性存在,则返回属性值;如果属性不存在,则返回 undefined
  console.log( $("img").prop("class") );//如果属性存在,则返回属性值;如果属性不存在,则返回 空("")
});
  • $(eleStr).prop()
<input type="checkbox">
<button>获取复选框的选中状态</button>
12
$("button").click(function(){
  console.log( $("input").prop("checked") ); //如果属性值存在,则返回 true;如果属性值不存在,则返回 false。
  console.log( $("input").attr("checked") );//如果属性值存在,则返回 checked;如果属性值不存在,则返回 undefined。
});

ajax是什么?能做什么?怎么做?

thbcm阅读(187)

ajax是什么?

1,AJAX 即“Asynchronous Javascript And XML”(异步JavaScript和XML).

2,是七种语言的综合,它包含七种语言.(javascript xml xstl shtml dom xmlhttprwquest css) 所以 ajax 是一种粘合剂

3,是一种与服务端语言无关的技术 可以在任何动态网站 上使用

4,主要用处为:无刷新的数据交互即是 使用 Javascript 向服务器提出请求并处理响应而不阻塞用户!核心对象 XMLHTTPRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。

还有: flash java applet iframe ajax

图解

普通数据交互

用 ajax 交互使用

这样的好处就是使用的时候可以

无刷新的数据交互 即是 使用 Javascript 向服务器提出请求并处理响应而不阻塞用户!核心对象 XMLHTTPRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。

bootstrap经典网页布局

thbcm阅读(203)

1.布局结构(头部固定,内容分为左右结构)
2.结果展示

3.HTML代码

<div class="logo">
    logo
</div>
<div class="container-fluid">    
    <div class="row main">
        <div class="col-md-3 nav">nav</div>
        <div class="col-md-9 content">
            <div class="content-body">content</div>
        </div>
    </div>
</div>

4.CSS样式

  • 代码分为格式化代码(用于清除不同浏览器兼容性问题)
  • 布局代码(用于界面布局的代码)
<style>
        /*淘宝CSS格式化代码*/
        body,
        h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td {
            margin: 0;
            padding: 0;
        }
        body, button, input, select, textarea {
            font: 12px/1.5 tahoma, arial, \5b8b\4f53;
        }
        h1, h2, h3, h4, h5, h6 {
            font-size: 100%;
        }
        address, cite, dfn, em, var {
            font-style: normal;
        }
        code, kbd, pre, samp {
            font-family: couriernew, courier, monospace;
        }
        small {
            font-size: 12px;
        }
        ul, ol {
            list-style: none;
        }
        a {
            text-decoration: none;
        }
        a:hover {
            text-decoration: underline;
        }
        sup {
            vertical-align: text-top;
        }
        sub {
            vertical-align: text-bottom;
        }
        legend {
            color: #000;
        }
        fieldset, img {
            border: 0;
        }
        button, input, select, textarea {
            font-size: 100%;
        }
        table {
            border-collapse: collapse;
            border-spacing: 0;
        }
        /*布局CSS代码*/
        body, html {
            background: #EAEEF2;
            width: 100%;
            height: 100%;
            color: lightblue;
        }
        .container-fluid {
            background: aquamarine;
            height: 100%;
        }
        .logo {
            background: black;
            font-size: 40px;
            padding-left: 20px;
            height: 60px;
            min-height: 60px;
            width: 100%;
            position: fixed;
            top: 0;
            right: 0;
            z-index: 100;
        }
        .nav {
            background: white;
            font-size: 30px;
            height: 100%;
            width: 15%;
            float: left;
            position: relative;
            margin-right: -100%;
            box-shadow: 0px 2px 3px 2px rgba(0, 0, 0, 0.1);
        }
        .content {
            height: 100%;
            width: 85%;
            margin-left: 15%;
        }
        .content-body {
            padding-left: 15px;
            padding-right: 15px;
            background: white;
            height: 100%;
            font-size: 300px;
            box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
            overflow: auto;
        }
        .main {
            background: #F8F8F8;
            height: 100%;
            padding-top: 68px;
            padding-bottom: 6px;
        }
    </style>

Bootstrap之栅格系统

thbcm阅读(186)

一、栅格系统(布局)

 Bootstrap 内置了一套响应式、移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列。

我在这里是把 Bootstrap 中的栅格系统叫做布局。它就是通过一系列的行(row)与列(column)的组合创建页面布局,然后你的内容就可以放入到你创建好的布局当中。下面就简单介绍一下 Bootstrap 栅格系统的工作原理:

网格系统的实现原理非常简单,仅仅是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统。Bootstrap 框架中的网格系统就是将容器平分成12份。

在使用的时候大家可以根据实际情况重新编译LESS(或Sass)源码来修改12这个数值(也就是换成24或32,当然你也可以分成更多,但不建议这样使用)。

二、使用规则

 Bootstrap 内置了一套响应式、移动设备。

1、数据行(.row)必须包含在容器(.container)中,以便为其赋予合适的对齐方式和内距(padding)。如:

2、在行(.row)中可以添加列(.column),但列数之和不能超过平分的总列数,比如12。如:

3、具体内容应当放置在列容器(column)之内,而且只有列(column)才可以作为行容器(.row)的直接子元素

4、通过设置内距(padding)从而创建列与列之间的间距。然后通过为第一列和最后一列设置负值的外距(margin)来抵消内距(padding)的影响

为了更好的理解 Bootstrap 框架的网格系统工作原理,我们来看一张草图:

简单对图解释一下:

1、最外边框,带有一大片白色区域,就是相当于浏览器的可视区域。在Bootstrap框架的网格系统中带有响应式效果,其带有四种类型的浏览器(超小屏,小屏,中屏和大屏),其断点(像素的分界点)是768px、992px和1220px。

2、第二个边框(1)相当于容器(.container)。针对不同的浏览器分辨率,其宽度也不一样:自动、750px、970px和1170px。在bootstrap.css的第736行~第756行进行设置:

3、2号横条阐述的是,将容器的行(.row)平分了12等份,也就是列。每个列都有一个“padding-left:15px”(图中粉红色部分)和一个“padding-right:15px”(图中紫色部分)。这样也导致了第一个列的padding-left和最后一列的padding-right占据了总宽度的30px,从而致使页面不美观,当然,如果你需要留有一定的间距,这个做法是不错的。如bootstrap.css中第767行~第772行所示:

4、3号横条就是行容器(.row),其定义了“margin-left”和”margin-right”值为”-15px”,用来抵消第一个列的左内距和最后一列的右内距。在bootstrap.css的第763行~第767行可以看到:

5、将行与列给合在一起就能看到横条4的效果。也就是我们期望看到的效果,第一列和最后一列与容器(.container)之间没有间距。

横条5只是想向大家展示,你可以根据需要,任意组合列与列,只是他们的组合数之和不要超过总列数。

三、栅格选项

  通过下面的截图可以比较清楚的来查看 Bootstrap 的栅格系统是如何在多种不同的移动设备上面进行工作的。

从上面的截图可以看出来,Bootstrap 针对不同尺寸的屏幕(包括手机、平板、PC等等)设置了不同的样式类,这样让开发人员在开发时可以有更多的选择。根据我的理解:如果在一个元素上使用多个不同的上面的样式类,那么元素会根据在不同尺寸选择最合适(匹配最理想的)的样式类。简单的举例进行说明:比如在一个元素上我们使用了两个样式类:.col-md-和.col-lg。可以对照上面的截图来看

第一种情况:尺寸》=1200px;那么会选择.col-lg。

第二种情况:尺寸》=992px 并且尺寸《=1200px;那么会选择.col-md。

第三种情况:如果尺寸《992px;那么这两个样式类都将不会作用于元素上。

四、基本用法

 网格系统用来布局,其实就是列的组合。Bootstrap 框架的网格系统中有四种基本的用法。由于 Bootstrap 框架在不同屏幕尺寸使用了不同的网格样式,在这一节中所涉及到的示例,我们都以中屏(970px)为例进行介绍,其他屏幕的使用也类似这一种。

1)、列组合

列组合简单理解就是更改数字来合并列(原则:列总和数不能超12),有点类似于表格的 colspan 属性,例如:

使用上面的结构,你将看到下图的效果:

五、列偏移

 有的时候,我们不希望相邻的两个列紧靠在一起,但又不想使用margin或者其他的技术手段来。这个时候就可以使用列偏移(offset)功能来实现。使用列偏移也非常简单,只需要在列元素上添加类名“col-md-offset-*”(其中星号代表要偏移的列组合数),那么具有这个类名的列就会向右偏移。例如,你在列元素上添加“col-md-offset-4”,表示该列向右移动4个列的宽度。

如上面的示例代码,得到的效果如下

实现原理非常简单,就是利用十二分之一(1/12)的 margin-left。然后有多少个 offset,就有多少个 margin-left。在 bootstrap.css 中第1205行~1241行所示:

注意:

不过有一个细节需要注意,使用”col-md-offset-*”对列进行向右偏移时,要保证列与偏移列的总数不超过12,不然会致列断行显示,如:

<div class="row">   <div class="col-md-3">.col-md-3</div>

  <div class="col-md-3 col-md-offset-3">col-md-offset-3</div>

  <div class="col-md-4">col-md-4</div> </div>

上面代码中列和偏移列总数为3+3+3+4 = 13>12,所以发生了列断行。​

如上面的示例代码,得到的效果如下

6、列排序 列排序其实就是改变列的方向,就是改变左右浮动,并且设置浮动的距离。在 Bootstrap 框架的网格系统中是通过添加类名“col-md-push-”和“col-md-pull-” (其中星号代表移动的列组合数)。

我们来看一个简单的示例:

默认情况之下,上面的代码效果如下:

“col-md-4”居左,“col-md-8”居右,如果要互换位置,需要将“col-md-4”向右移动8个列的距离,也就是8个offset ,也就是在“<div class=”col-md-4″>”添加类名“col-md-push-8”,调用其样式。

也要将“col-md-8”向左移动4个列的距离,也就是4个offset,在“<div class=”col-md-8″>”上添加类名“col-md-pull-4”:

7、列的嵌套 Bootstrap框架的网格系统还支持列的嵌套。你可以在一个列中添加一个或者多个行(row)容器,然后在这个行容器中插入列(像前面介绍的一样使用列)。但在列容器中的行容器(row),宽度为100%时,就是当前外部列的宽度。来看一个简单示例:

效果如下:

注意:嵌套的列总数也需要遵循不超过12列。不然会造成末位列换行显示。

JavaScript的数组的常用方法

thbcm阅读(174)

今天给大家带来JavaScript对数组的操控的常用方法及其常见的应用场景。

向数组添加元素的方法:

1.Array.push(value1,value2,…)

  • 向数组的末尾追加
  • 返回值是添加数据后数组的新长度。
  • 会改变原有数组
let arr = [1,2,3];
let result= arr.push(4,5);
console.log(result)   //5
console.log(arr)    //[1,2,3,4,5]

2.Array.unshift(value1,value2,…)

  • 向数组的开头添加
  • 返回值是添加数据后数组的新长度。
  • 会改变原有数组
let arr = [1,2,3];
let result= arr.unshift(4,5);
console.log(result)   //5
console.log(arr)    //[4,5,1,2,3]

3.splice(index,0,value1,value2,…)

  • 向数组的指定 index 处插入
  • 返回的是被删除的元素。
  • 会改变原有数组

如果只传入俩个参数那就是从【参数1】的位置删除【参数2】个数

let arr = [1,2,3];
let result = arr.splice(2,0,4,5);
console.log(result)   //Array(0)
console.log(arr)    //[1,2,4,5,3]

向数组删除元素的方法:

1.pop()

  • 从尾部删除一个元素
  • 返回被删除掉的元素。
  • 会改变原有数组

let arr = [1,2,3];
let result = arr.pop();
console.log(result)   //3
console.log(arr)    //[1,2]

2.shift()

  • 从头部删除一个元素
  • 返回被删除掉的元素。
  • 会改变原有数组

let arr = [1,2,3];
let result = arr.shift();
console.log(result)   //1
console.log(arr)    //[2,3]

3.splice(index,howmany)

  • 在 index 处删除 howmany 个元素,
  • 返回的是被删除掉的元素的集合。
  • 会改变原有数组

let arr = [1,2,3];
let result = arr.splice(1,2);
console.log(result)   //[2,3]
console.log(arr)    //[1]

数组排序的方法:

1.reverse()

  • 反转,倒置
  • 该方法会改变原有数组。

let arr = [1,2,3];
let result = arr.reverse();
console.log(result)   //[3,2,1]
console.log(arr)    //[3,2,1]

2.sort()

  • 按指定规则排序
  • 改变原有数组。
let arr = [2,1,3];
let result = arr.sort();
console.log(result)   //[1,2,3]
console.log(arr)    //[1,2,3]

注意: 如果你认为 sort 方法是让数组从小到大排序那就错了。 我们可以改变一下刚才的数组,加一些大一点的数字。

let arr = [25,148,12,6,38];
let result = arr.sort();
console.log(result)   //[12, 148, 25, 38, 6]
console.log(arr)    //[12, 148, 25, 38, 6]

有些朋友现在是不是稍微有一点懵了? 可是我们还是能找到一些规律的,他就是首先按照一个数字的第一个字符的大小去做比较,然后再用第二个字符去做比较,小的在前面,如果朋友们想让这个数组从真正的小到真正的大排序,那么我们可以改造一下刚才的代码。

let arr = [25,148,12,6,38];
let result = arr.sort((a,b) => a - b);
console.log(result)   //[6, 12, 25, 38, 148]
console.log(arr)    //[6, 12, 25, 38, 148]

如果想要从大到小排序那么就

let arr = [25,148,12,6,38];
let result = arr.sort((a,b) => b - a);
console.log(result)   //[148, 38, 25, 12, 6]
console.log(arr)    //[148, 38, 25, 12, 6]

总的来说,数组的 sort 方法里面的参数是一个回调函数,有俩个值,返回值如果是第一个值减去第二个值那么就是从小到大排序,如果是第二个值减去第一个值就是从大到小排序。

数组连接的方法:

1.concat()

  • 数组连接
  • 返回连接后的新数组。

let arr = [25,148,12,6,38],
    arr2 = [1,5,8]
let result = arr.concat(arr2);
console.log(result)   //[25, 148, 12, 6, 38, 1, 5, 8]
console.log(arr)    //[25, 148, 12, 6, 38]

2.join()

  • 将数组的每个元素以指定分隔符(默认为“,”)连接成字符
  • 返回该连接完成后的字符串。

let arr = [25,148,12,6,38];
let result = arr.join(),
    result2 = arr.join('+')
console.log(result)   //25,148,12,6,38
console.log(result2)   //25+148+12+6+38
console.log(arr)    //[25, 148, 12, 6, 38]

数组截取的方法:

1.slice(start,end)

  • 从 start 起始索引处,截取到 end 结束索引处
  • 返回截取到的元素集合。 注意: 如果不传值那么就是直接拷贝了一份数组的值。 end 可以不传值,表示截取到数组的末尾。start 与 end 也可以取负值,取负值表示从后向前计数。

let arr = [1,2,3,4,5,6,7];
let result = arr.slice(),
    result2 = arr.slice(2),
    result3 = arr.slice(2,4);
console.log(result)   //[1, 2, 3, 4, 5, 6, 7]
console.log(result2)   //[3, 4, 5, 6, 7]
console.log(result3)    //[3, 4]
console.log(arr)    //[1, 2, 3, 4, 5, 6, 7]

数组转换的方法:

1.toString()

  • 转换为字符串,和不传参数的 join()一致,还可以使用 2,8,16 进制转变为不同结果。

let arr = [1,2,3,4,5,6];
let result = arr.toString();
console.log(result)   //1,2,3,4,5,6
console.log(arr)    //[1,2,3,4,5,6]

提取数组指定深度的方法

比如说现在有一个这样的数组: [1,2,[3,4,[5,6]]], 我想将它输出为[1,2,3,4,5,6]。 如果自己去写递归的话还是比较麻烦的。 那么我们可以使用数组本身的 flat 方法来深度解析。 1.flat()

  • 按照指定的深度递归遍历数组
  • 返回值是遍历到的所有元素集合。

let arr = [1,2,[3,4,[5,6]]],
    res = arr.flat(Infinity),  //无限递归,直到最后
    res2 = arr.flat();      //如果不传参数那么只递归一次
console.log(arr)   //[1,2,[3,4,[5,6]]]
console.log(res)   //[1, 2, 3, 4, 5, 6]
console.log(res2)   //[1,2,3,4,[5,6]]

JavaScript基础入门

thbcm阅读(206)

JavaScript简介

JavaScript(Java脚本)是一种基于对象(Object)和事件驱动( Event Driven)并具有安全性能的解释型脚本语言,目的是能够在客户端的网页中增加动态效果和交互能力,实现了用户与网页之间的一种实时的、动态的交互关系。

JS组成

JS组成:ECMAScript(JS的核心)、DOM(文档对象模型)、BOM(浏览器对象模型)

  • ECMAScript:主要定义了 JS 的语法
  • DOM:一套操作页面元素的 API,DOM 可以把 HTML 看做是文档树,通过 DOM 提供的 API 可以对树上的节点进行操作
  • BOM:一套操作浏览器功能的 API,通过 BOM 可以操作浏览器窗口

JS用途

主要用于网页特效、服务端开发、命令行工具、桌面程序、APP、控制硬件—物联网、游戏开发

JavaScript的书写位置

1、写在行内

 <input type="button" value="按钮" onclick="alert('Hello World')" />

2、写在 script 标签中

<script>
alert('Hello,world!');
</script>
由<script>...</script>包含的代码就是JavaScript代码,他将直接被浏览器执行。

3、写入外部 js 文件中,在页面引入

<script type="text/javascript" src="/js/Hello.js"></script>

把代码放在单独的文件中更有利于维护代码,并且多个页面可以各自引用同一个 .js 文件。

基本语法

JavaScript 语法和 Java 相似,每个语句以;结束,语句块用{···}。 注意:JavaScript 严格区分大小写。

变量的使用

变量的概念: 一个变量就是分配了一个值的参数。使用变量可以方便的获取或者修改内存中的数据 变量的声明: 在声明变量时使用关键字 var,要注意关键字与变量名之间的空格,也可以在一行中声明多个变量,以逗号分隔变量。

var age;

var age, name, sex; age = 10; name = ‘zs’;

注意: 变量名必须是一个 JavaScript 标识符,应遵循以下标准命名规则:

  • 第一个字符必须是字母、下划线(_)或者美元符($)
  • 后面可以跟字母、下划线、美元符、数字,但不能是其他符号
  • 在被申明的范围内,变量的名称必须是唯一的
  • 不能使用保留关键字作为标识符

变量的赋值: 在 JavaScript 中,使用=对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同的数据类型的变量,但是只能用var申明一次。要显示变量,可以用console.log(x),打开 Chrome 的控制台就可以看到结果。

var age; age = 18;

var age = 18;

注释

以//开头直到行末的字符被视为注释,注释是给开发人员看的,JavaScript 引擎会自动忽略。 另一种块注释是用/*···*/把多行字符包裹起来,视为注释。 例如:

<html>
<head>
<script> //这是一行注释
alert('Hello,world!');
/*从这里开始是块注释

块注释结束*/
</script>
</head>
<body>
···
</body>
</html>

数据类型

JS 的数据类型分为两大类

  • 简单数据类型(基本数据类型):boolean、number、string、null、undefined(、symbol)
  • 复杂数据类型:object

number

JavaScript 不区分整数和浮点数,统一用 number 表示,以下都是合法的 number 类型:

123;//整数123 0.456;//浮点数0.456 1.2345e3;//等同于1234.5 -99;//负数 NaN;//当无法计算结果是使用NaN表示 Infinity;//表示无限大

number 存在精度问题:

0.2 + 0.1 = 0.30000000000000004 0.1 + 0.2 !== 0.3 //true

所以最好不要判断浮点数是否相等

string

用于表示由零个或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串是以单引号’或双引号”括起来的任意文本,比如’abc’、”xyz”等等。单引号和双引号只是一种表示方式,不是字符串的一部分,所以,字符串’abc’中只有 a、b、c 这3个字符。 特点: 不可变的 当重新为一个字符串赋值时,实际上是重新开辟内存空间,例如:

var lang=“Java”; lang=lang+“Script”;

以上代码是先创建一个空间存放字符串 “Java”,接着在运行到下一行代码时,在内存中重新开辟一个空间,存放的是”JavaScript”,变量 lang 指向新开辟的空间。这些操作都是后台发生的,影响网站性能,所以一般代码中不要写大量的字符串拼接。

null和undefined

null表示一个“空”的值,他和0以及空字符串’‘不同,0是一个数值,’’表示长度为0的字符串,而 null 示空。 undefined 表示“未定义”。

boolean

布尔值和布尔代数的表示完全一样,一个布尔值只有 true 和 false 两种值,区分大小写。可以直接用 true 和 false 表示布尔值,也可以通过布尔运算算出来:

true;//这是一个true值
false;//这是一个false值
2>1;//这是一个true值
2>=3;//这是一个false值

转为boolean值

  • null
  • undefined
  • “”
  • NaN
  • 0

注意:布尔值经常用在条件判断句中。

typeof运算符

获取变量类型,返回的值是string类型 结果有:

  • “undefined”
  • “boolean”
  • “string”
  • “number”
  • “object”
  • “function”
typeof 10     //"number"
typeof  "10"  //"string"

function fn(){
...
}
typeof fn   //"function"
//age未声明
typeof age    //"undefined"

typeof null   //"object"
typeof undefined //"undefined"

JavaScript对象

一、object 对象

  1. Object 类型,我们也称为一个对象。是 JavaScript 中的引用数据类型。
  2. 它是一种复合值,它将很多值聚合到一起,可以通过名字访问这些值。
  3. 对象也可以看做是属性的无序集合,每个属性都是一个名/值对。
  4. 对象除了可以创建自有属性,还可以通过从一个名为原型的对象那里继承属性。
  5. 除了字符串、数字、true、false、null 和 undefined 之外,JS 中的值都是对象。

二、创建对象 创建对象的方式有两种

第一种:
var obj = new Object();
obj.name = "###";
obj.age = 15;
第二种:
var obj = {
name:"###",
age:15
}

三、对象属性的访问

访问属性的两种方式:对象.属性名 或者 对象[“属性名”]

四、数组

数组也是对象的一种。数组是一种用于表达有顺序关系的值的集合的语言结构。

创建数组 =====注意:不同于 java 数组长度可变 var users = new Array(3); users[0]=3; users[1]=9; users[2]=5; users[3]=999; 数组内的各个值被称作元素。每一个元素 都可以通过索引(下标)来快速读取。索引是从零开始的整数。

函数

函数对任何语言来说都是核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。ECMAScript 中的函数由function关键字来声明,后跟一组参数以及函数体。 语法:

function functionName(arg0,arg1...){
statement
}

示例:

function sayHi(name,message){
alert("Hello "+name+","+message);
}
sayHi("ly","how are you?");//函数的调用

一些自带的函数

返回值 ECMAScript 中的函数定义时可以有返回值,也可以没有返回值。当函数执行完的时候,并不是所有时候都要把结果打印。我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。函数通过 return 返回一个返回值

返回值语法:

//声明一个带返回值的函数
function 函数名(形参1, 形参2, 形参...){
 //函数体
 return 返回值;
}

//可以通过变量来接收这个返回值
var 变量 = 函数名(实参1, 实参2, 实参3);

函数的调用结果就是返回值,因此我们可以直接对函数调用结果进行操作。

返回值详解: 如果函数没有显示的使用 return 语句 ,那么函数有默认的返回值:undefined 如果函数使用 return 语句,那么跟再 return 后面的值,就成了函数的返回值 如果函数使用 return 语句,但是 return 后面没有任何值,那么函数的返回值也是:undefined 函数使用 return 语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说 return 后面的所有其他代码都不会再执行。

参数 ECMAScript 不介意传递的参数的个数,也不在乎参数的数据类型。ECMAScript 中的参数是由一个数组来表示的,函数体内部可以通过arguments对象来访问这个参数数组。arguments对象只是与数组类似(不是Array实例)

形参和实参:

形式参数:在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。 实际参数:如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。

var x = 5, y = 6;
fn(x,y);
function fn(a, b) {
 console.log(a + b);
}
//x,y实参,有具体的值。函数执行的时候会把x,y复制一份给函数内部的a和b,函数内部的值是复制的新值,

推荐好课:JavaScript微课ES6微课

php和Java哪个好?php和Java的对比

thbcm阅读(168)

php 和 Java 哪个好?这个问题应该会有很多人问,但是每种编程语言都有各自的优缺点,所谓的哪个好,不过就是看你习惯于使用哪种或者说你更擅长于哪种,所以今天我们就来说一说php和Java之间的对比。

1、php与Java的语法比较

php 是解释执行的服务器脚本语言,首先 php 有简单容易上手的特点。语法和c语言比较象,所以学过 c 语言的程序员可以很快的熟悉php 的开发。

java的学习需要先学好 java 的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以 java 不如 php 好学。

推荐课程:01:PHP在线教程;02:JAVA在线教程

2、php与Java系统架构设计的对比

PHP采用面向过程的开发方法,专注互联网领域。WEB 领域 php 拥有得天独厚的优势,使用 php 来开发 web 是最好的选择。

 Java 的 Web 开发技术,需要使用的是面向对象的系统设计方法,总而言之,Java 功能强大,分支众多,没有 java 不能做的软件。

3、php 与 Java 访问数据库速度的比较

php 对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用 Java 开发的 Web 应用从 MySQL 数据库转到 Oracle 数据库只需要做很少的修改。而 php 则需要做大量的修改工作。

Java 通过 JDBC 来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。

4、php 与 Java 源代码安全的对比

PHP 开发的程序的源代码都是公开的。

Java 开发的程序,最后用户拿到的是只是一些编译好的 class 类,安全性高。

5、php 与 Java 开发成本的对比

PHP 最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的 Web 应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。

Java 的 Web 应用服务器有免费 Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere 和 Web logic。

6、php 与 Java 的性能比较

有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。 在循环性能测试中,JSP 只用了令人吃惊的四秒钟就结束了2000020000 的回圈。而 PHP 测试的是 20002000 循环(少一个数量级),却分别用了63秒。 数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13秒,PHP 需要 69 秒。

总结:

7、php 和 Java到底哪个好?

从上面的对比来看,php 和 Java 可以说是各有千秋,php 更加适合于快速开发,中小型应用系统,开发成本低、易学。Java 更适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。你想要学习哪个,完全看你以后更倾向于做哪一方面的开发。

前端jQuery面试题

thbcm阅读(171)

1、jquery的优点

  • jQuery 是轻量级的框架,大小不到 30kb;
  • 它有强大的选择器,出色的 DOM 操作的封装,有可靠的事件处理机制;
  • 完善的 ajax,出色的浏览器的兼容性;
  • 而且支持链式操作,隐式迭代。
  • 行为层和结构层的分离,还支持丰富的插件,jquery 的文档也非常的丰富。

2、jQuery中有哪几种类型的选择器?

  • 基本选择器:直接根据 id、CSS 类名、元素名返回匹配的 DOM 元素。
  • 层次选择器:也叫做路径选择器,可以根据路径层次来选择相应的 DOM 元素。parent > child,prev + next ,prev ~ siblings
  • 表单选择器: :input ,:text ,:password ,:radio ,:checkbox ,:submit 等;
  • 过滤选择器:在前面的基础上过滤相关条件,得到匹配的 DOM 元素。基本过滤器选择器::first,:last ,:not ,:even ,:odd ,:eq ,:gt ,:lt内容过滤器选择器: :contains ,:empty ,:has ,:parent可见性过滤器选择器::hidden ,:visible属性过滤器选择器:[attribute] ,[attribute=value] ,[attribute!=value] ,[attribute^=value] ,[attribute$=value] ,[attribute*=value]子元素过滤器选择器::nth-child ,:first-child ,:last-child ,:only-child表单过滤器选择器::enabled ,:disabled ,:checked ,:selected

3、 jQuery 中$(this) 和 this 关键词有何不同?

  • $(this) 返回一个 jQuery 对象,你可以对它调用多个 jQuery 方法,比如用 text() 获取文本,用val() 获取值等等。
  • this 代表当前元素,它是 JavaScript 关键词中的一个,表示上下文中的当前 DOM 元素。你不能对它调用 jQuery 方法,直到它被 $() 函数包裹,例如 $(this)。

4、$(document).ready()方法和window.onload有什么区别?

  • window.onload 方法是是页面所有元素都加载完毕,包括图片等所有元素。只能执行一次。
  • $(document).ready() 方法是DOM结构绘制完毕后就执行,不必等到加载完毕。 意思就是 DOM 树加载完毕,就执行,不必等到页面中图片或其他外部文件都加载完毕。并且可以写多个 .ready。
  • 所以$(document).ready的执行时间要早于 window.onload

6、jquery中的选择器 和 css 中的选择器有区别吗?

  • jQuery 选择器支持 CSS 里的选择器,
  • jQuery 选择器可用来添加样式和添加相应的行为
  • CSS 中的选择器是只能添加相应的样式

7、操作样式的常用方法

  • addClass()​ 添加样式
  • removeClass()​ 删除样式
  • toggle()​ 切换样式

8、jquery中如何来获取或和设置属性?

  • jQuery 中可以用 attr()方法来获取和设置元素属性
  • 用 removeAttr() 方法来删除元素属性

9、jquery中遍历节点的常用方法

  • children()​ 获取子元素,只考虑子元素不考虑后代元素
  • next()​ 获取下一个紧邻的兄弟元素
  • prev() ​获取上一个紧邻的兄弟元素
  • siblings()​ 获取当前元素的所有兄弟元素(除了自己)
  • parents()​ 获取当前元素的所有祖先元素。
  • find() ​取得匹配元素中的元素集合 包括子代和后代

10、jQuery中的hover()和toggle()有什么区别?

  • hover(fn1,fn2): 一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。
    //当鼠标放在表格的某行上时将class置为over,离开时置为out。
    $("tr").hover(function(){    
        $(this).addClass("over");
    },              
    function(){    
        $(this).addClass("out"); 
    });
  • toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。
    //每次点击时轮换添加和删除名为selected的class。
    $("p").toggle(function(){   
        $(this).addClass("selected");   
    },function(){   
        $(this).removeClass("selected"); 
    });

推荐好课:jQuery微课jQuery入门实战

为什么要学习HTML?HTML会过时吗?

thbcm阅读(169)

学编程有没有必要学 HTML 呢?这是编程初学者中非常普遍的问题,而且在网上意见分歧很大。关于初学者在学习 HTML 前的一些常见问题,编程狮W3Cschool整理了以下资料希望对你有所帮助:

学编程不需要学习HTML?

那些说不需要 HTML 知识的人要么不了解 Web 设计,要么别有用心。虽然现在哪怕不会 HTML 也有其他方法可以解决 web 设计相关问题,但绝大多数资深前端开发者还是会建议你最好还是要学习它的。

没有时间学习HTML?

通常了解基本知识只需要20到40分钟。花几个小时学习 w3cschool官网 的《HTML 教程 》和《HTML 微课 》,你就可以制作一个简单而完整的网页。如果你愿意每周花几个小时,学习几个月的 《前端开发体系课程 _ 》,那么您将对网站的工作方式有一个很好的了解。这种时间上的投资将获得很大的回报比。试想下,如果你本周花在学习上一小时,未来的工作上每个月都将永远节省一个小时。尽管投资回收期在开始时比较缓慢,但你最终可以只需要花费一小部分时间用来完成工作,你觉得值得吗?

编写HTML太慢?

这是劝退很多人的一个原因,但实际上这个问题是不存在的。因为大多数情况下我们不需要编写 HTML 代码,只需了解它即可。

我有一个很好的所见即所得编辑器,所以我不需要HTML

市面上有很多可视化的工具如 WYSIWYG 、Dreamweaver及现在越来越多的”低代码“云开发工具等,它可以帮助你更高效地工作。如前所述,你并不是要手动输入 HTML 代码,而是要了解 HTML 的工作原理。

例如:射钉枪能比锤子更快地帮助您建造房屋,但是如果你不知道如何搭建框架以及将钉子钉在何处,造出来的房屋很可能会倒塌。我们需要了解如何手动构造 HTML,然后使用所见即所得工具更快地工作。

PS:所见即所得的编辑器永远不会是完美的,总有时候是需要我们手动来调整 HTML。。

我不擅长学习计算机语言

放心,虽然我们时常把它称为语言,但其实 HTML 并不是一种编程语言(从技术上讲,HTML 被称为“mark up”语言,也就是标记语言,英文全称是“HyperText Markup Language”。)。从难度上讲,它就像是小孩子们的“密码”游戏。真正难点在于要学习的东西太多了,但是请记住,你不必全部都学会!只要按照自己的步调学习尽可能多的知识即可。

不要将费时困难混淆。HTML 很耗时,但是并不难。另外,你不需要学会全部知识点,即使只花费几个小时来学习基本结构也将极大地帮助你。

HTML会过时吗?

不会。其他编程语言一直在发展中,并且很可能最终会取代 HTML,但是 HTML 将在很长一段时间内继续作为几乎所有网站的基础。在任何情况下,HTML 都会为您提供坚实的基础,然后再采用 XML 等新语言。

HTML对我而言太过局限了

如果您的目的是创建网页,那么很抱歉告诉你,无论你喜不喜欢,你只能选择 HTML,因为他是构成网络构成的基础。如果你真的想以其他格式(例如PDF)来传送,请注意,它并不是一个网页,所以它不能实现我们在网页中的一些常见功能。

以上就是编程狮W3Cschool为你整理的关于《为什么要学习HTML?HTML会过时吗?》的全部内容,现在你要开始学习 HTML 了吗?

2020年最好的11本JavaScript书籍

thbcm阅读(167)

近日,本文评选出11本优秀的 JavaScript书 籍,无论你是打算在2021年入门还是进阶JavaScript,或者是了解ES6新特性,都可以在这份清单中找到你想要的书

放在最前面,文章很长,技术点很多,希望不会影响你的观看(非诚勿扰):自己整理了一份最全面前端学习资料,从最基础的HTML+CSS+JS [炫酷特效,游戏,插件封装,设计模式]到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,有想学习web前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。加Q 裙:777093078(招募中)

初学者

1、《JavaScript for kids 》

这是一本适合所有年龄段的入门 JavaScript 的书,书中主要介绍 JavaScript 语言和编程相关的基础介绍,内容难度不高,里面的示例儿童都能看得懂,在本书的最后,你还将学会自己创建一个有趣的动画和游戏,让你对加下去的 JavaScript 提升有一个扎实的基础

2、《Head First JavaScript Programming》

Head First 系列的书籍就不多说了,基本每个书单都会推荐它们,真的是非常适合初学者,风趣的表达方式,插图丰富,讲解也是深入浅出。你可以通过这本书理解了 JS 的语言特点后,再去学其他的前端框架,就会显得轻松很多。

3、《JavaScript & jQuery交互式Web前端开发》

这是一本涵盖了所有 JavaScript 基本概念的书,它不仅向你展示如何阅读和编写 JavaScript 代码,同时还会以一种简单且视觉化的方式,教腻有关计算机编程的基础知识。不过阅读本书之前,你最好对 HTML 和 CSS 有一些了解。

4、《Speaking JavaScript》

这本书适合有编程经验的程序员学习JavaScript使用。Rauschmayer博士迅速切入JavaScript的核心及其各种概念,语言十分精炼,可以帮助你快速上手这门语言,最主要的是你还能在线免费阅读这本书(地址:http://speakingjs.com/es5/index.html

中/高级

1、《eloquent JavaScript》

这本书除了介绍JavaScript之外,还介绍了编程的基本原理,作者Marijn Haverbeke 是一位世界级的JavaScript程序员,与其他书籍不同的是,本书将将编程原理与运用规则完美地结合在一起,而且将所有知识点与一个又一个经典的编程故事融合在一起,读者可以在轻松的游戏式开发中学会JavaScript程序设计。这本书同样可以在线阅读(地址:https://eloquentjavascript.net/

2、《You dont know JavaScript系列- UP&going》

本书是 You Don’t Know JS 系列中的其中一本,也可以说是第一本,书中除了介绍基本的编程构建块还包含 JavaScript 的核心机制,以及本系列中其他书籍的概述。程序员书库此前也曾和大家分享过本书。

3、《effective JavaScript》

最接地气的 JavaScript 实践,亚马逊五星级畅销书,作者凭借多年标准化委员会工作和实践经验,深刻辨析 JavaScript 的内部运作机制、特性、陷阱和编程最佳实践,

4、《JavaScript忍者秘籍》

最适合 JavaScript 中级程序员看的书,书中结合了 ECMAScript 6和7的相关概念,以及流行的 JavaScript 框架所使用的技术,是你进阶为 JavaScript 高手不可多得的好书

5、《JavaScript面向对象精要》

本书适合那些经验丰富的面向对象程序员,如 C++和 Java,本书关注面向对象的原理和 ES5 对象新特性,可以有效帮助那些已经掌握面向对象编程的程序员快速了解这些特性是如何在 JavaScript 中发挥作用的。

6、《JavaScript for impatient programmers》

本书涵盖了 JavaScript 的所有基本功能,包括ES2018,读本书之前你可以不具备任何的 JavaScript 编程基础,但要具备一定的编程经验,本书最终将以免费在线阅读的形式呈现。

ES6

ES6,是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。以下这两本书主要侧重于ES6的新功能特性

1、《Understanding ecmascript 》

学习 ES6 新特性的最佳书籍。通过本书,你将学到 ES6 类语法的使用,如何使用使用集合、映射等存储数据的方法等

2、《exploring ES6》

这又是一本免费的在线阅读电子书。作者在 ES6 功能实现之前就已经在筹备这本书,主要关注 ECMAScript 6 的核心功能,书中的演示代码都托管至 GitHub 上。

联系我们