零JS筆記 | 數據類型

JS中的數據類型:number(NaN) string boolean function object(fn,[],{},null) undefined

var str = 'abc';
str.charAt(3) //下標

var obj = window; //object

var arr = [1] //
console.log(typeof arr); //object

function fn() {
  alert(this)
}
console.log(typeof fn); //function

obj.fn1 = function () {
  alert(1)
}
console.log(typeof obj.fn1); //object

var json = {
  name: 'elmok'
}
console.log(typeof json); //object

var u;
alert(u) //undefined 表示一種狀態
alert(typeof u) //undefined

顯式類型轉換:Number(),parseInt(),parseFloat()

//字符串轉數字 Number()
//可轉換的類型
var a = '100'
alert(a + 100) // '100100'

alert(Number(a) + 100) // 200

var b = '000100';
alert(Number(b)) //100

var c = '+100'
alert(Number(c)) //100

var d = ''; //d = '   '
alert(Number(d)); //0

var e = true
alert(Number(e)) //1

var arr = [] //['']-->0   [1,2,3]-->NaN  ['123']-->123
alert(Number(arr)) //0

var f = null
alert(Number(f)) // 0

//可轉換類型:parseInt(),parseFloat()
var i = '100px'
alert(parseInt(i)) //100,從左到右查看,若有非數字,則截斷;

var j = '+100'
alert(parseInt(j)) //從左到右,如遇到 + - 空格,則例外

var l = '100px'
alert(parseInt(l, 8)) // parseInt(l,進制)

var k = '10.1231231231元'
alert(parseFloat(k)) // 10.1231231231
//判斷是否有帶小數點  parseInt(n) == parseFloat(n)

無法轉換的數據類型:

1、NaN: not a number //不是數字 的 數字類型;
2、出現NaN表示進行了非法的操作;
3、NaN ==> false;
4、自已不等於自己;
5、isNaN 不是數字 返回true, 數字返回false
6、isNaN內部依靠Number()轉換

var fn = function () {
}
alert(Number(fn)) //NaN

var json = {
} //json無法轉

alert(Number(json)) //NaN

var g; //undefined
alert(Number(g)) //NaN

var h = '100px'
alert(Number(h)) //NaN

var o = Number('abc')
alert(o) //NaN

alert(typeof NaN) // number

//isNaN 不是數字 返回true,  是數字返回false ,即Number()能轉換的
alert(isNaN(123)) //false
alert(isNaN('abc')) //true
alert(isNaN(function () {
  alert(1)
})) //true
alert(isNaN('250')) //false ,使用Number('250')轉成250數字後返回false
alert(isNaN(true)) // false
alert(isNaN([])) //false
alert(isNaN(NaN)) //true

inp[1].onclick = function () {
  if (isNaN(inp[0].value)) { //有缺陷,如輸入 空格、true false
    alert('不是數字')
  } 
  else {
    alert('是數字')
  }
}

if (NaN) {
  alert('真')
} 
else {
  alert('假')
}

隱式類型轉換: - * / % 可讓字符串變成數字 + 可讓數字變成字符串 ++ -- 變成數字 > < 數字比較,字符串比較 !轉成布爾值 ==

alert(100 - '1') //99
alert('100' + 1) // 101
var n = '10'
alert(n++) //11
alert('10' > 5) // true '10'被轉成數字10
alert('10' < '5') // true 編碼位置比較
alert(!true) //false
alert(!'ok') //false
alert('2' == 2) //true

小技巧:

找字符:判斷typeof == 'string';
找數字:判斷typeof=='number' && 排除屬性NaN的數字類型:!isNaN(obj)
找可以轉成數字的:parseFloat(arr[i])==parseInt(arr[i])
找NaN:判斷typeof==='number' && 並且屬性不是數字:isNaN(obj)
var arr = [ '100px', 'abc'-6, [], -98765, 34, -2, 0, '300', , function(){alert(1);}, null, document, [], true, '200px'-30,'23.45元', 5, Number('abc'), function(){ alert(3); }, 'xyz'-90 ]

//找到數字,排除布爾值
for (var i = 0; i < arr.length; i++) { 
  if ((typeof arr[i]) == 'number' && !isNaN(arr[i])) {
    console.log(arr[i])
  }
}
//parseFloat会干掉0  所以要加上
var arrN = []
for (var i = 0; i < arr.length; i++) {
  if (parseFloat(arr[i]) == parseInt(arr[i])) {
    console.log(arr[i]);
    arrN.push(arr[i])
  }
}
console.log(Max(arrN));
function Max(arr) {
  var max = arr[0];
  for (var i = 0; i < arr.length; i++) {
    if (max < arr[i]) {
      max = arr[i]
    }
  }
  return max
}
//找字符串
for (var i = 0; i < arr.length; i++) {
  if (typeof arr[i] === 'string') {
    console.log(arr[i])
  }
}
//找到數字類型,並且是NaN
for (var i = 0; i < arr.length; i++) {
  if (typeof (arr[i]) == 'number' && isNaN(arr[i])) {
    console.log(i + ':' + arr[i]);
  }
}

零CSS3筆記 | 屬性操作

属性选择器[IE7+]
E[attr]
E[type="text"]
E[attr~="value"]以空格隔开,其中词列表中包含了一个value词
E[attr^="value"]以value开头
E[attr$="value"]以value结束的
E[attr*="value"]包含了value
E[attr|="value"]value或以“value-”开头的值(比如说zh-cn)



结构性伪类

of-type,关注以标签计算;

child,关注凡有子节点即计算,有&&的意思,缺一不成立;

E:nth-child(n) E的父元素中的第n个字节点,并且标签必须=E

p:nth-child(odd) 奇数

p:nth-child(even) 偶数

p:nth-child(2n)

E:nth-last-child(n) E的父元素中的第n个字节点,倒数计算



E:nth-of-type(n) E的父元素中的第n个字节点,只算类型E

E:nth-last-of-type(n) E父元素中的第n个字节点,只算类型E,倒数计算

E:empty E元素中没有子节点。注意:子节点包含文本节点

:first-child == :nth-child(1) IE9+
:last-child == :nth-last-child(1) IE9+
:first-of-type == :nth-of-type(1) IE9+
:last-of-type == :nth-last-of-type(1) IE9+

p:nth-of-type(2) 找到P标签父级下的第2个P标签 可能这种更靠谱
p:nth-last-of-type(2) 找到P标签父级下的倒数第2个P标签 可能这种更靠谱
p:empty 只要有东西即不成立,无论任何东西

p:only-child -->匹配那些是其父元素唯一孩子的 E 元素;IE9+
p:only-of-type -->根据 p 的类型,匹配那些在其兄弟里是唯一此类元素的 p 元素。IE9+

<div class='box1'>
<div>
<p>我是p,父级下只有我一个孩子,所以 only-child 及 only-of-type 都选中我</p>
</div>

<div>
<span>我是妹妹span</span>
<p>我是p,父级下只有妹妹span,没有别的哥哥弟弟p,但是也只有 only-of-type选中我;而only-child有妹妹span所以选不中</p>
</div>

<div>
<p>我是p,我有好多兄弟,所有我不能被选中</p>
<p>我是p,我有好多兄弟,所有我不能被选中</p>
</div>
</div>
.box1 p:only-child{background:green;color: #fff;}
.box1 p:only-of-type{background:peru;color: #fff;}

E:target 表示当前的URL片段的元素类型,这个元素必须是E
E:disabled 不可点击时的样式
E:enabled 可点击的样式
E:checked 已选中的checkbox或radio
E:first-line E元素中的第一行
E:first-letter E元素中的第一个字符
E::selection E元素在用户选中文字时
E::before 生成内容在E元素前
E:not(s) E元素不被匹配如 p:not(.tab) //不匹配带有class='tab'的元素
E~F表示E元素毗邻的F元素
Content 属性

<pre>#div1,#div2{width: 100px;height: 100px;background:red;display: none;}

div1:target,#div2:target{display: block;}

input:enabled{background:pink}
input:disabled{background:peru}
input:checked{width: 20px;height: 20px;}

label{ float: left; margin: 0 5px; overflow: hidden; position: relative;}
label input{ position: absolute; left: -50px; top: -50px;}
span{ float: left; width: 20px; height: 20px;border:1px solid #000;}
input:checked ~span{background:green}

p~h2{background:#f90}

.box p:first-line{background:#cdcd00}
.box p:first-letter{font-size: 30px;}

.box2 p::selection{background:darkmagenta; color:#fff;}

.box3:before{content:'before的内容';border:3px solid #000;padding-left: 10px;padding-right: 10px;}
.box3:after{content:'after的内容';border:3px solid #000;padding-left: 10px;padding-right: 10px;}

</pre>

See the Pen WQeqBP by elmok (@elmok) on CodePen.


<script async src="//assets.codepen.io/assets/embed/ei.js"></script>



文本屬性

顏色模式:rgba(),应用:背景透明,颜色不透明,反向,边框透明,有bug;

文字陰影:text-shadow:x y blur color...

文字搭邊:-webkit-text-stroke:宽度 颜色 ,只支持webkit

Direction 定义文字排列方式(全兼容) 注意要配合unicode-bidi 一块使用

Text-overflow 定义省略文本的处理方式 clip 无省略号 Ellipsis 省略号 (注意配合overflow:hidden和white-space:nowrap一块使用)

p{
direction: rtl;        /*文字從右到左*/
unicode-bidi: bidi-override

/*文字超出點點省略*/
p{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis
}

自定義字體: @font-face
http://www.fontsquirrel.com/fontface/generator

    @font-face {
        font-family: 'chalk_marksregular';
        src: url('../font/chalkmars-webfont.eot');
        src: url('../font/chalkmars-webfont.eot?#iefix') format('embedded-opentype'),
        url('../font/chalkmars-webfont.woff2') format('woff2'),
        url('../font/chalkmars-webfont.woff') format('woff'),
        url('../font/chalkmars-webfont.ttf') format('truetype'),
        url('../font/chalkmars-webfont.svg#chalk_marksregular') format('svg');
        font-weight: normal;
        font-style: normal;
    }
    p{ font-family: 'chalk_marksregular'; font-size: 100px;transition: 1s}
    p:hover{ color: #f90;}