জাভাস্ক্রিপ্ট: অবস্থান বনাম। অবস্থান বনাম


311

আপনি কখন locationইউআরএল স্ট্রিং বনাম সেটিং এ সেট করবেন location.href?

location = "http://www.stackoverflow.com";

বনাম

location.href = "http://www.stackoverflow.com";

মজিলা বিকাশকারী নেটওয়ার্ক রেফারেন্স


6
location.hrefএকই-উত্স-নীতিমালার কারণে মেল সেটিংটি ব্যর্থ হয়েছে: javascript.info/tutorial/…
তাহা জাহাঙ্গীর


1
আমার কাছে একটি কৌণিক 4 অ্যাপ রয়েছে যা টাইপস্ক্রিপ্ট 2.6.2 ব্যবহার করে। উইন্ডো.এলোকেশন কেবল পঠনযোগ্য এবং আমি কেবল উইন্ডো.লোকেশন এইচআরএফ (একটি কৌণিক সাবস্ক্রিপশন থেকে কলব্যাকের প্রসঙ্গে) ব্যবহার করে নির্ধারণ করতে পারি, সংকলক ত্রুটিগুলি পুনরায় সংশোধন না করে- সম্ভবত এটি জাভাস্ক্রিপ্ট ১.০ এর সামঞ্জস্যযোগ্যতার কোনও বিষয় বা অ্যাসিঙ্ক্রোনাস হ্যান্ডলিং সম্পর্কিত । মূলত উইন্ডো.লোকেশন.আরএফটিকে সর্বদা কাজ করে বলে মনে হয়।
ক্রিস হালক্রো

উত্তর:


261

আপনি locationসরাসরি সেট করতে পারেন কারণ এটি সামান্য খাটো। আপনি যদি ছড়িয়ে যাওয়ার চেষ্টা করছেন তবে আপনি সাধারণত তা বাদ দিতে পারেন window.

উভয় করতে URL বরাদ্দকরণ location.hrefএবং location, জাভাস্ক্রিপ্ট 1.0 কাজ করার সংজ্ঞায়িত করা হয় নেটস্কেপ 2 পিছনে, এবং যেহেতু প্রতিটি ব্রাউজারের বাস্তবায়িত হয়েছে। সুতরাং আপনার বাছাই করুন এবং আপনি যেটিকে পরিষ্কার মনে করেন তা ব্যবহার করুন।


9
নীচের উত্তরে @ সুইসমিস্টার দ্বারা উল্লিখিত মত, দেখে মনে হচ্ছে উইন্ডো.লোকেশন। রেফ কিছুটা এক্সএইচআর অনুরোধ হিসাবে ধরা হয়। যদি কোনও এক্সএইচআর এর সাফল্য কলব্যাকের মধ্যে থেকে বরখাস্ত করা হয়, উইন্ডো.লোকেশন.ইরেফকে এক্সএইচআর হিসাবে বিবেচনা করা হবে যখন উইন্ডো.লোকেশন কোনও লিঙ্কে ক্লিক করার অনুকরণ করে।
অক্ষয় রাজে

147

এমনকি যদি উভয়ই কাজ করে তবে আমি পরে ব্যবহার করব। locationএকটি অবজেক্ট এবং কোনও বস্তুকে স্ট্রিং বরাদ্দ করা পাঠযোগ্যতা বা রক্ষণাবেক্ষণের পক্ষে ভাল হয় না।


60
একটি জটিল পেপাল ইন্টিগ্রেশন বাস্তবায়ন করার সময়, আমি ব্যবহারের জন্য খুব জোরালো কারণের মুখোমুখি হয়েছি window.location: এটির প্রয়োজন নেইSAME ORIGIN
সুইস মিস্টার

4
হতে পারে এটি কেবল আমি কিন্তু location = 'http://www.example.com'দুর্দান্ত পঠনযোগ্য বলে মনে হচ্ছে। তবে, একটি বিশেষ মামলা হিসাবে। এটি পিছনের দিকে সামঞ্জস্যপূর্ণ এবং নিকট ভবিষ্যতে সামঞ্জস্যপূর্ণ থাকবে
অ্যালেক্স ডব্লিউ

10
উইন্ডো.লোকেশন যদি কোনও অবজেক্ট থাকে তবে এর সাথে একটি স্ট্রিং বরাদ্দ করা একটি স্ট্রিং দিয়ে ওভাররাইট করে। বাস্তবে উইন্ডো.লোকেশন এমন একটি সম্পত্তি যা গেটর এবং সেটার পদ্ধতিতে থাকে। আপনি যখন এটি সেট করেন, একটি স্ট্রিং প্রত্যাশিত হয় এবং গ্লোবাল লোকেশন অবজেক্টটি সেটার দ্বারা আপডেট হয়। আপনি এটি পেয়ে গেলে, বিশ্বব্যাপী অবস্থান অবজেক্টটি ফিরে আসে।
JukkaP

64

যেমনটি ইতিমধ্যে বলা হয়েছে locationযেমন একটি বস্তুতবে সেই ব্যক্তিটি ব্যবহার করার পরামর্শ দিয়েছেন। তবে, আপনি .hrefসংস্করণটি ব্যবহার করতে আরও ভাল করবেন ।

অবজেক্টগুলির ডিফল্ট বৈশিষ্ট্য রয়েছে যা অন্য কিছু নির্দিষ্ট না থাকলে সেগুলি ধরে নেওয়া হয়। locationঅবজেক্টের ক্ষেত্রে এটির একটি সম্পত্তি বলা হয় .href। এবং অ্যাসাইনমেন্টের সময় কোনও সম্পত্তি উল্লেখ না করে এটি ডিফল্টরূপে "href" ধরে নেবে।

পরবর্তী অবজেক্টের মডেল সংস্করণ পরিবর্তন না হওয়া পর্যন্ত এটি সবই ঠিক আছে এবং সেখানে আর কোনও ডিফল্ট সম্পত্তি নেই, বা ডিফল্ট সম্পত্তি পরিবর্তন করা হয়। তারপরে আপনার প্রোগ্রামটি অপ্রত্যাশিতভাবে ব্রেক হয়ে যায়।

যদি আপনি বোঝাতে চান তবে আপনার hrefনির্দিষ্ট করা উচিত href


13
পঠনযোগ্যতা বা রক্ষণাবেক্ষণ সম্পর্কে সাধারণ মন্তব্যের চেয়ে ভাল ব্যাখ্যা। বাস্তবে এই নির্দিষ্ট ক্ষেত্রে অবজেক্টের মডেলটি পরিবর্তিত হবে না, যেহেতু অর্ধেক ওয়েব বন্ধ হয়ে যায় - সুতরাং যে
কোনওটি

71
এটি ভাল শোনাচ্ছে তবে সত্য নয়। সাধারণভাবে ডিওএম বা জাভাস্ক্রিপ্টে কোনও ডিফল্ট সম্পত্তি সম্পর্কিত কোনও ধারণা নেই। locationকাজের জন্য একটি স্ট্রিং বরাদ্দ করা হচ্ছে কারণ সম্পত্তিটি জাভাস্ক্রিপ্ট ১.০ এ ফিরে এই বিশেষ অ্যাসাইনমেন্ট আচরণটি হিসাবে সংজ্ঞায়িত করা হয়েছিল এবং যেহেতু প্রতিটি ব্রাউজার এটি কার্যকর করেছে। এইচটিএমএল 5 এর এখন এটির প্রয়োজন। সুতরাং এটি নির্ধারণের জন্য সুন্দর বা আরও সামঞ্জস্যপূর্ণ হতে পারে তবে এটি করার জন্য .hrefকোনও পশ্চাদপদ বা ফরোয়ার্ড সামঞ্জস্যের সুবিধা নেই।
বোবিনস

6
prettiness গণনা
টম অ্যান্ডারসন

4
window.location = urlসুন্দর
এরিক মুয়সর

21
location = urlসুন্দর হয়
fregante

20

কয়েক বছর আগে, locationIE এ আমার জন্য কাজ location.hrefকরেনি এবং করেছিলেন (এবং উভয়ই অন্যান্য ব্রাউজারে কাজ করেছেন)। তার পর থেকে আমি সর্বদা সবেমাত্র ব্যবহার করেছি location.hrefএবং আবার কখনও সমস্যা হয়নি। IE এর কোন সংস্করণটি ছিল তা আমি মনে করতে পারি না।


42
এটি সম্ভবত আইই এর একটি সংস্করণ যেখানে এটি স্টাফগুলি ভুল করেছে এবং অন্য প্রতিটি ব্রাউজার এটি সঠিকভাবে করেছে। ;-)
শন ডি।

9
মধ্যে strict modeক্রোম আপনি সরাসরি দায়িত্ব অর্পণ করা চেষ্টা একটি ব্যতিক্রম নিক্ষেপ করা হবে location, খুব তাই আমি সবসময় ব্যবহারlocation.href
Hashbrown

9
আইই এর "এক" সংস্করণ?
Lpc_dark

@ শ্যাশন ডি। একটি ব্রাউজার সঠিকভাবে কাজ করছে? ওটা কখন ঘটেছিল! : ডি
ব্যবহারকারী 21733533

15

কেবল পরিষ্কার করার জন্য, আপনি এটি করতে পারবেন না location.split('#'), locationএটি একটি বস্তু, স্ট্রিং নয়। তবে আপনি এটি করতে পারেন location.href.split('#');কারণ location.hrefএকটি স্ট্রিং।


3
আপনার মন্তব্য সত্য, তবে আপনি লোকেশন অবজেক্টের href অ্যাট্রিবিউট, একটি স্ট্রিং পাওয়ার কথা বলছেন । অন্যান্য সমস্ত আলোচনাগুলি মূল্য নির্ধারণের সাথে সম্পর্কিত হয়, মানটি না পড়ে। তবে আপনার কথাটি সঠিক। পার্থক্যটি হল হেরেফ একটি স্ট্রিং এবং অবস্থান কোনও বস্তু is
ফিল ডিডি

15

একটি পার্থক্য মনে রাখা, যদিও।

ধরা যাক আপনি বর্তমান URL টি ব্যবহার করে কিছু URL তৈরি করতে চান। নিম্নলিখিত কোড আপনাকে পুনঃনির্দেশিত সত্য, ফোন করে বলে কারণ হচ্ছে না String.replaceকিন্তু Location.replace:

nextUrl = window.location.replace('/step1', '/step2');

নিম্নলিখিত কোডগুলি কাজ করে:

// cast to string
nextUrl = (window.location+'').replace('/step1', '/step2');

// href property
nextUrl = window.location.href.replace('/step1', '/step2');

3

টাইপস্ক্রিপ্ট ব্যবহার সহ window.location.hrefwindow.locationপ্রযুক্তিগতভাবে কোনও বস্তু যেহেতু রয়েছে:

Properties
hash 
host 
hostname
href    <--- you need this
pathname (relative to the host)
port 
protocol 
search 

সেটিং window.locationএকটি ধরণের ত্রুটি তৈরি করবে, যখন window.location.href টাইপ স্ট্রিংয়ের

সূত্র

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.