-
String,索引返回目標單字符
var str = "hello world";
console.log(str[1]); //e
//下標法,從ES5開始支持,IE8+,以及其他瀏覽器都是支持的
console.log(str.charAt(1)); //e
-
截取字符串的3個方法
1)slice(start, [end]); //start到end,end缺省為:str.length
2)substring(start, [end]);//start到end,end缺省為:str.length
3)substr(start, [length]);//start開始截取length個字符,length缺省為: str.length
- 參數不含負數
slice和substring是沒有區別的。 - 參數含負數,負值的轉化就各不相同:
slice:負值參數 = 負值 + str.length
substring:所有負值參數轉化為 0
substr:第一個參數和slice一樣,第二個參數和substring一樣
var str = "hello world";
console.log(str.slice(-3)); //"rld"
console.log(str.substring(-3)); //"hello world"
console.log(str.substr(-3)); //"rld"
console.log(str.slice(3,-4)); //"lo w"
console.log(str.substring(3,-4)); //"hel"
console.log(str.substr(3,-4)); //""
-
創建對象中,構造函數、原型對象和對象實例之間的關系:
每個構造函數都會包含一個指向原型對象的指針(prototype屬性),而原型對象包含一個指向構造函數的指針(constructor屬性),每個實例包含一個指向原型對象的內部指針([[prototype]]屬性)
-
原型鏈
首先要了解上面關于創建對象中,構造函數、原型對象和對象實例的關系,原型鏈的構成即是,對象實例的內部指針指向原型對象,構造函數的prototype也是指向這個原型對象,然后以另外一個對象的實例作為這個原型對象(相當于用這對象實例重寫了這個原型對象),而這個原型對象(對象實例)也會有一個內部指針指向上一級的原型對象,這個上一級的原型對象有個constructor指向構造函數
function SuperType(){
this.property = true;
}
SuperType.getSuperTypeValue = function(){
return this.property;
}
function SubType(){
this.subProperty = false;
}
SubType.prototype = new SuperType();
SubType.prototype.getSubTypeValue = function(){
return this.subProperty;
}
var instance = new SubType();
console.log(instance.getSuperTypeValue()); //true
Paste_Image.png
如上面的,對象實例的內部指針指向原型對象,原型指針的內部指針再指向上一級的原型對象,這樣構成的鏈,即為原型鏈。
-
函數聲明提升
函數聲明提升,是指在讀取代碼執行之前先讀取函數聲明。函數聲明提升只對
//有效
function XXX(){}
//無效
var func = function(){};
函數表達式是沒有函數聲明提升
-
淺復制 和 深復制
淺復制:淺復制是復制引用,復制后的引用都是指向同一個對象的實例,彼此之間的操作會互相影響
深復制:深復制不是簡單的復制引用,而是在堆中重新分配內存,并且把源對象實例的所有屬性都進行新建復制,以保證深復制的對象的引用圖不包含任何原有對象或對象圖上的任何對象,復制后的對象與原來的對象是完全隔離的
參考鏈接
-
BOM:delete 刪除 在全局作用域上定義的變量和在Window對象上定義的區別
var name = 'issac';
window.age = 18;
console.log(delete window.name); //false
console.log(delete window.age); //true
PS: delete 要在IE9+上才能使用(其他瀏覽器可以使用)
-
location的位置操作(重定向)
location的屬性表
location.assign('http://www.lxweimin.com/u/73a630d398fd');
location.href = 'http://www.lxweimin.com/u/73a630d398fd';
location = 'http://www.lxweimin.com/u/73a630d398fd';
//這三中方式的位置操作效果是一樣,第二、三行代碼,其實就是變相調用assign函數。
改變location的其他屬性也會產生重定向,并會在瀏覽器上留下記錄(hash會改變當前url,會在瀏覽器留下記錄,但是不會重新加載)
//http://www.lxweimin.com/u/73a630d398fd#issac
location.hash = "#issac";
//http://www.lxweimin.com/u/73a630d398fd?name=issac
location.search = "?name=issac";
//http://www.baidu.com/u/73a630d398fd
location.hostname = "www.baidu.com";
//http://www.lxweimin.com/mardir/
location.pathname = "mardir";
//http://www.lxweimin.com:8080/u/73a630d398fd
location.port = 8080;
關于location.reload();
location.reload(); //可能從緩存中加載
location.reload(true); //強制從服務器中加載
-
history對象
history.go(-1); //上一頁
history.go(1); //下一頁
history.go(2); //下兩頁
//還可以使用
history.back(); //上一頁
history.forward(); //下一頁
//跳轉到最近的issacer.cn?name=issac
history.go('issacer.cn?name=issac');
-
jQuery的$.fn.data()
//html
<div class="data"></div>
//javascript
<script>
var arr = {a:1, b:2, c:3};
$(".data").data('data', arr);
</script>
//javascript
<script>
console.log($(".data").data("data")); //輸出 arr
</script>
又上面可以看出,這個data函數是可以將對象綁定到元素節點,這樣可以免去重復的初始化,可以起到緩存的作用。
-
jquery的on函數實現被擯棄的delegate功能
delegate,就好像他的意思,就是“委托”,委托的好處是,讓動態插入的html元素也可以觸發事件,其實delegate的原理就是講事件綁定到父元素,然后每次點擊父元素的是否,在判斷用戶點擊的是否是我們指定的子元素,是則繼續執行代碼,否則,不執行。
// html
<div id="delegate">
<button>1</button>
<button>2</button>
</div>
// javascript,實現事件委托
$("#delegate").on("click", "button", function(){
console.log($(this).text());
})
-
合并配置的兼容性寫法
this.options = $.extend({}, Completer.DEFAULTS, $.isPlainObject(options) && options);
-
keycode的兼容性獲取寫法
function (e){
var keyCode = e.keyCode || e.which || e.charCode;
}
-
jquery-on的對象式綁定事件
$element.attr('autocomplete', 'off').on({
focus: $.proxy(this.enable, this),
blur: $.proxy(this.disable, this)
});
-
移動端-監聽鍵盤“完成”等回車鍵
使用keycode == 13
-
關于以下情況函數的參數傳遞
比如現在我有個函數,他有個參數是一個函數
var callback = function(){
}
$.Test({
callback: callback,
error: error
});